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

あなたは同じ値がB.col1_02で終わる

  • には存在しないためA.col1
    • 別個の値のセットをしたいように見えます。

    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` 
    

    これは、第3の要件についてLIKE '%suffix、第二の要件の古いLEFT JOIN ... IS NULLトリック、そして最初のためDISTINCT A.col1使用しています。

    この特定の照会は、さまざまなSQL方言で機能します。カーソルはこのケースとは関係ありません。

  • +0

    SCPOMGR.UDT_DFUTOSKUMAPさt、EXISTS NOT SCPOMGR.udt_gen_param G(区別t.item、t.skulocのLOC を選択SCPOMGR.UDT_DFUTOSKUMAP T WHERE s1.ITEM、SCPOMGR.SKUのS1、SCPOMGR.udt_gen_param G SELECT * FROM G.region = 'XYZ' とG.jda_code = substr(s1.loc、-2,2)) とG.region = 'XYZ' とG.jda_code = substr(T.SKUloc、-2,2) –

    +0

    あなたのコメントが何を表しているかわかりません。しかし、パフォーマンス上の理由から、LEFT JOIN ... IS NULLの代わりにWHERE NOT EXISTSを推奨しません。 –

    +0

    私は結合を使用したくありません。ここではサブクエリを使用できませんか? –

    関連する問題