SQL中的子查询用于选择

时间:2017-08-13 18:17:23

标签: mysql sql-server oracle cursor subquery

我想使用内部和外部select语句过滤游标中的记录。 我如何实现这一目标?

我只希望来自两个表的'_02'记录。

table A:
col1
1122_01
1234_02
3456_02
7899_02

table B:
col1
1111_02
1234_02
4567_02

table Final:
col1
3456_02
7899_02


SELECT distinct a.col1
    FROM A a  
    WHERE NOT EXISTS (SELECT 1 FROM B b
                                WHERE b.col1 = a.col1
                                 and b.col1='02')
and a.col1='02'

这会有用吗?

还是这个?

SELECT distinct t.item, t.skuloc loc 
FROM SCPOMGR.UDT_DFUTOSKUMAP t 
     , SCPOMGR.udt_gen_param G 
WHERE NOT EXISTS (SELECT * 
                  FROM SCPOMGR.SKU s1 
                       , SCPOMGR.udt_gen_param G 
                       ,SCPOMGR.UDT_DFUTOSKUMAP t 
                   WHERE s1.ITEM = t.ITEM 
                   AND s1.LOC = t.SKULOC 
                   and G.region='XYZ' 
                   and G.jda_code= substr(s1.loc,-2,2)
              )
and G.region='XYZ' 
and G.jda_code= substr(T.SKUloc,-2,2)

1 个答案:

答案 0 :(得分:0)

看起来你想要一套

  • A.col1
  • 的不同值
  • B.col1
  • 中不存在相同的值
  • _02结尾。

如果您将使用SQL,那么学会非常精确地指定您想要的内容至关重要。从本质上讲,SQL是一种用于指定数据集的方案。在指定要用SQL实现的要求时,使用基本集理论的概念。

一旦有了精确的规范,用SQL编写它通常很容易。如果您无法在SQL中表达您想要的内容,将重新访问该规范。

在你的情况下:

   SELECT DISTINCT A.col1
    FROM A
    LEFT JOIN B ON A.col1 = B.col1
   WHERE B.col1 IS NULL
     AND A.col1 LIKE `%_02`

第三项要求使用LIKE '%suffix,第二项要求使用旧LEFT JOIN ... IS NULL技巧,第一项要求使用DISTINCT A.col1

此特定查询适用于各种SQL方言。游标与此案无关。