2017-08-13 104 views
-2

我想使用内部和外部select语句筛选我的游标中的记录。 我该如何做到这一点?用于select的SQL中的子查询

我只想要'_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) 
+2

你的例子对我没有意义 –

+0

光标?我看不到游标。 –

+0

@ P.Salmon我在游标中使用 –

回答

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方言。游标与这种情况无关。

+0

SELECT DISTINCT t.item,t.skuloc LOC FROM SCPOMGR.UDT_DFUTOSKUMAP吨, SCPOMGR.udt_gen_paramģ WHERE NOT EXISTS(SELECT * FROM SCPOMGR.SKU S1,SCPOMGR.udt_gen_param G,SCPOMGR.UDT_DFUTOSKUMAP吨 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' 和G.jda_code = substr(T.SKUloc,-2,2) –

+0

我不太确定您的评论代表什么。但是,出于性能方面的原因,我不推荐'WHERE NOT EXISTS'来代替'LEFT JOIN ... IS NULL'。 –

+0

我不希望使用连接。我不能在这里使用子查询,情况如何? –