2017-08-13 101 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

我不希望使用連接。我不能在這裏使用子查詢,情況如何? –