SQL 中NOT EXISTS的改写

来源:互联网 发布:域名注册网站哪个好 编辑:程序博客网 时间:2024/05/20 02:54
   在标准SQL语句中 NOT EXISTS 对应于EXISTS,EXISTS筛选剩下的数据就是 NOT EXISTS对应数据,有了这层思路,我们就可以对相关的NOT EXISTS进行改写了。
<p>在进行SQL改写之前,我们先来看一对简单的例子,也许大部分人都会有这样的意识,EXISTS对应于INNER JOIN。</p>
SELECT T.* FROM TEST_EXISTS   TWHERE  EXISTS(SELECT 1 FROM TEST01_EXISTS P WHERE T.CUST_CODE=P.CUST_CODE AND P.CUST_SHOURU >8000)ORDER BY  T.CUST_CODE; select T.* FROM TEST_EXISTS T        INNER JOIN TEST01_EXISTS P      ON T.CUST_CODE=P.CUST_CODE       AND P.CUST_SHOURU >8000
      ORDER BY T.CUST_CODE; 

 两条SQL语句中出来的结果是一致的,显然是用INNER JOIN 去改写EXISTS是正确的,但是要是改写NOT EXISTS呢,还能用INNER JOIN吗,显然稍微想一想这是行不通的。

要想从EXISTS的反面筛选出数据,最起码你需要保持源表数据的完整性以后才能从源表中筛选出满足你条件的数据。

SELECT T.* FROM TEST_EXISTS   TWHERE NOT  EXISTS(SELECT 1 FROM TEST01_EXISTS P WHERE T.CUST_CODE=P.CUST_CODE AND P.CUST_SHOURU >8000)ORDER BY  T.CUST_CODE; SELECT T.*  FROM TEST_EXISTS T  LEFT JOIN TEST01_EXISTS P    ON T.CUST_CODE = P.CUST_CODE   AND P.CUST_SHOURU > 8000 WHERE P.CUST_CODE IS NULL ORDER BY T.CUST_CODE;
要想保持数据的完整性,你只能用LEFT JOIN,然后从一个集合中去筛选满足你要求的数据,where可以满足你的需求。






0 0
原创粉丝点击