2017-05-31 2 views
-2

以下のシナリオでは、単一のクエリでフレームを作成してください。
2つのテーブル - Table_A(製品)とTable_B (製品と在庫) テーブルBの中に存在しないか、またはBに存在する場合は、Bに在庫= 0があります。Bに存在しないか在庫が0のAからすべての製品を入手してください

以下は、 veしようとしました -

SELECT PROD_ID FROM TABLE_A 
WHERE PROD_ID NOT IN (SELECT PROD_ID FROM TABLE_B) 
OR PROD_ID IN (SELECT PROD_ID FROM TABLE_B WHERE STOCK = 0) 

このクエリは永遠に実行されるので、正しい出力が得られるかどうかはわかりません。それが正しければ、私はパフォーマンスを最適化する方法を見つけるでしょう。

+0

宿題?何を試しましたか? – jarlh

+0

@jarlh質問に質問を追加しました。親切に助けてください。 –

+0

LEFT JOINを検索 – Sparky

答えて

0

以下のクエリの行に沿って何かが動作するはずです。

select prod_id 
from table_a 
where prod_id not in (select prod_id from table_b where stock > 0) 
; 

これはprod_idtable_bに、NOT NULLに拘束されていることを前提としています。

+0

また、在庫は負の値ではないと仮定しています。これは正当な仮定である場合もありません。 – Boneist

+0

@Boneist - 実際には、技術的に(「在庫」の技術的定義を使用)、いいえ、在庫できません。負。もちろん、OPのビジネスでは、非技術的な方法でこの用語を使用するかもしれませんが、私はそれを疑っています。 – mathguy

+0

こんにちは@mathguy、どうやってこれを説明できますか? Table_Bには在庫が0以上の多数の製品があります。したがって、 'not exist()'の中の条件は常に真です。 –

関連する問題