当前位置:首页 > 开发 > 数据库 > 正文

选择不存在于另一表的数据几种写法

发表于: 2013-05-02   作者:coollyj   来源:转载   浏览次数:
摘要: 看看以下三种写法: 写法1:SELECT ... FROM A   WHERE A.key NOT IN (SELECT key FROM B);       写法2:SELECT ... FROM A              

看看以下三种写法:

写法1SELECT ... FROM A

 

WHERE A.key NOT IN (SELECT key FROM B);

 

 

 

写法2SELECT ... FROM A

 

            LEFT JOIN B ON A.key = B.key

 

WHERE B.key is null;

 

写法3SELECT ... FROM A

 

WHERE NOT EXISTS

 

(SELECT 'x' FROM B WHERE A.key = B.key);

 

写法1采用NOT IN的写法。很不幸DB2对于NOT IN通常采用TBSCAN(表扫描),这是效率很差的写法。最佳写法是第三种写法,如果B.key上有索引,它可以不用fetch B表的数据就可以完成查询。第二种写法采用对外表B is null判断进行过滤,效率稍差。

 

注:事实上,在DB2优化器的作用下,第二种写法与第三种写法的存取方案相关无几,只是第二种写法比第三种写法多了一步filter操作。

 

建议使用第3种写法,己使用第2种写法的代码也不必修改,因为其效率与第3种写法差不多。

 

例:

 

  SELECT A.*

 

  from EDS.TW_BCUST_200409 A LEFT OUTER JOIN KF2.TW_BCUST B ON

 

          A.TM_INTRVL_CD =B.TM_INTRVL_CD and A.CUST_ID =B.CUST_ID and

 

          A.USR_ID =B.USR_ID and A.BCUST_EFF_MO =B.BCUST_EFF_MO

 

  WHERE B.TM_INTRVL_CD is null

 

 

 

  SELECT *

 

  from EDS.TW_BCUST_200409 A

 

  where NOT EXISTS

 

     (select 'x'

 

     from KF2.TW_BCUST B

 

     WHERE A.TM_INTRVL_CD =B.TM_INTRVL_CD and A.CUST_ID =B.CUST_ID

 

             and A.USR_ID =B.USR_ID and A.BCUST_EFF_MO =

 

             B.BCUST_EFF_MO)

 

这两种写法对应的存取方案:

 

                                 

 

             RETURN                            RETURN     

 

             (   1)                            (   1)     

 

               |                                 |        

 

              BTQ                               BTQ       

 

             (   2)                            (   2)     

 

               |                                 |        

 

             FILTER                            HSJOIN     

 

             (   3)                            (   3)     

 

               |                              /      \    

 

             HSJOIN                     TBSCAN       TBSCAN

 

             (   4)                     (   4)       (   5)

 

            /      \                      |            |  

 

      TBSCAN       TBSCAN          Table:           Table:

 

      (   5)       (   6)          EDS              KF2   

 

        |            |             TW_BCUST_200409  TW_BCUST

 

 Table:           Table:         

 

 EDS              KF2            

 TW_BCUST_200409  TW_BCUST   

选择不存在于另一表的数据几种写法

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
我们常用的有以下几种方法来用JavaScript写一个“类”: 1. 构造函数(public属性和方法) 1: functi
来自波音(Boeing)公司的John Vu两个主题演讲(软件过程改进的现状、 如何在软件外包市场胜出),切中
来自波音(Boeing)公司的John Vu两个主题演讲(软件过程改进的现状、 如何在软件外包市场胜出),切
男人的最高品位在于选择妻子,选择了什么样的妻子就等于选择了什么样的人生。一个男人拥有具备以下1
border-radius:40px; border-radius:40px/20px; border-radius:40px 20px; border-radius:40px 20px
mysql数据库中有两个数据库A和B。A数据库中有三张关联的表省,市,县。B数据中有一张地区表(id,name
一、什么是闭包和闭包的几种写法和用法 1、什么是闭包 闭包,官方对闭包的解释是:一个拥有许多变量
1 偶数分频 (1)2的幂分频 案例I 二分频 i: div_2.v module div_2( input i_clk, input i_rst_n,
  好久没有写博客了,过了一个十一长假都变懒了,今天总算是恢复状态了。好了,进入正题,今天来
原文: 全面理解Javascript闭包和闭包的几种写法及用途   好久没有写博客了,过了一个十一长假都变
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号