2016-03-29 13 views
0

DB2、OR、OSに2台の車両テーブルがあります。また、お届け予定の車両の注文があり、OSは既にその車ですORテーブルのすべての注文を参照したいが、OSテーブルで取り消された注文ではなく、ステータス( '8')で取り消されたものを特定して、このクエリを試したが、 OSテーブル内のものだけです。すべてのオーダーがOSテーブルにあるわけではありませんが、OUTER JOINを試しましたが、期待した結果ではありません。DB2 Query Join

SELECT OR.OBNO, OR.ORSC, OS.SCLD 
FROM 
TABLE.OR LEFT OUTER JOIN TABLE.OS ON OR.OBNO=OS.OBNO 
WHERE OS.SLCD NOT IN ('8') 

これが唯一の(ORテーブルはSLCDのステータスを持っていない、私は8つのステータスを持つすべての注文を除外したいOSテーブルで私にすべての注文を取得し、ORテーブルでものを除きます。 OSテーブルではなく、OSテーブルにないものを保持する)。

これは同じ結果です。

SELECT OR.OBNO, OR.ORSC, OS.SCLD 
FROM 
TABLE.OR LEFT OUTER JOIN TABLE.OS ON OR.OBNO=OS.OBNO AND OS.SLCD NOT IN ('8') 

誰かが私を助けてくれることを願っています。おかげでたくさん

+0

あなたの2回目の試行が間違っていると同じ結果を配信しません。最初は私のために良い見えますが、私はあなたがそれが間違っていると思うものを完全に理解することはできません。左結合のため、左テーブルのすべての行が返されます。これはORですが、 "OSテーブルのすべての注文"を書いたものです。 – MichaelTiefenbacher

+0

はい、私は左外部結合がORテーブルのすべての行を返すと思っていましたが、このケースではSLCDステータスのOSテーブル内にある注文だけを返します、私はあまりにも私が問題を抱えているときにNOT IN条件を指定すると、OR表がOR表内にある注文を戻していません。私はあなたのおかげで感謝します。 –

答えて

0

は、私はこれらのデータを取得する別の方法があると思います。

SELECT OR.OBNO, OR.ORSC, OS.SCLD 
FROM TABLE.OR WHERE NOT EXISTS 
    (SELECT 1 FROM TABLE.OS WHERE OR.OBNO=OS.OBNO AND OS.SLCD = '8') 
+0

ありがとうございます@mustaccio言及したクエリを試しましたが、データを取得しません、あなたが言及した方法は私にエラーが発生するので別の方法でクエリを試しました:SELECT PFOR.ORNO、PFOR.ORSC、PFOS.SLCD から LPMXPFIL .PFOR PFOR INNER JOIN LPMXPFIL.PFOS PFOS.ORNO = PFOS.OBNOのPFOS.OBNO 存在しない場所 (PFOS.SLCDからLPMXPFIL.PFOSを選択PFOS PFOS.SLCD = '8') –