0

このクエリが実際に何をするのかを理解するのを手伝ってくれる人がいるかどうか尋ねたかっただけです。

select location, address
from warehouse D 
where not exists
    ( select * from product P, supplier S
      where P.supplier_no = S.supplier_no
      and   S.name = 'Azure Supplies'
      and   not exists
            ( select *
              from stock S
              where P.product_no = S.product_no
              and D.warehouse_no = S.warehouse_no ) ) ;
4

4 に答える 4

3

not exists ( select ... )is true、選択が行を返さない場合。

そのため、最奥selectは在庫のある製品を見つけようとします。どの製品ですか?中間selectで選択されたものはすべて、最も内側のクエリを逆にします (つまり、在庫のないすべての製品を返します)。これは既知のすべての倉庫に結合され、このサプライヤーの製品の在庫がない倉庫のリストを取得します。

正論理を使用すると、理解がより簡単になります。

まず、次の 3 つのセットを作成します。

  • すべての倉庫 (セットD)
  • 「Azure用品」の全商品(セット`P)
  • ( セット)Pの倉庫内および倉庫からの製品のすべての在庫DS

別のセットsupplier Sがありますが、それは私が話していることではないことに注意してください.

次に、これらのセットをフィルタリングします。

まず、在庫のあるすべての製品 (内部not exists) を削除します。これにより、在庫のない製品のセットが得られます。

最後のステップでは、このセットが空でないすべての倉庫を結果から削除します。

于 2013-01-23T17:06:31.860 に答える
1

実際には、在庫に存在しない 'Azure Supplies' 製のすべての製品を見つけようとしています。

于 2013-01-23T16:49:50.897 に答える
0

倉庫 D から場所と住所を選択します。ここでは、在庫 s にも存在しない「azure supplies」という名前のサプライヤはありません。

all = 条件は、一般的な列の値を b/w テーブルで表示するためのものです。

于 2013-01-23T16:54:20.227 に答える
0

これは本質的に、「Azure Supplies」という名前のサプライヤがなく、そのサプライヤに関連する製品がないテーブル ウェアハウスから場所と住所を選択することです。

于 2013-01-23T16:48:18.507 に答える