日期:2014-05-18  浏览次数:20366 次

请教not exists的原理
select * from tbpost a where not exists(
select * from tbpost b where 交易类型='0400'  
and a.商户号=b.商户号 and a.交易日期=b.交易日期 and a.流水号=b.流水号 and a.终端号=b.终端号)

select * from tbqc a where exists(select count(1) from tbqc b where a.name=b.name and a.sex=b.sex and a.age=b.age having count(*)=1 )
这都是怎么执行的 能说的越细越好 谢谢。

我个人理解是选执行外面的查询 没查询一行数据 然后用外面查询的数据做条件 去执行exists里面的查询 如果符合条件就 返回数据 不知道是不是这样运行的。  


------解决方案--------------------
SQL code
--显示 对应商户号,交易日期,流水号,终端号相同,且不在交易类型 '0400'范围内的


SELECT  *                                               --4、就显示a.*
FROM    tbpost a
WHERE   NOT EXISTS ( SELECT *                           --3、没找到  
                     FROM   tbpost b
                     WHERE  交易类型 = '0400'
                            AND a.商户号 = b.商户号       --1、a对应b来说,b就是对应交易类型 = '0400'的
                            AND a.交易日期 = b.交易日期   --2、相同商户号,交易日期,流水号,终端号的
                            AND a.流水号 = b.流水号       
                            AND a.终端号 = b.终端号 )
                            
                            
 --不重复的数据                           

SELECT  *                                              --4、就显示a.*
FROM    tbqc a
WHERE   EXISTS ( SELECT COUNT(1)                       --3、找到了
                 FROM   tbqc b
                 WHERE  a.name = b.NAME                --1、a与b 相同NAME,sex,age 的信息计数
                        AND a.sex = b.sex
                        AND a.age = b.age
                 HAVING COUNT(*) = 1 )                 --2、只出现一次的