2

次のクエリを処理するには、5 つの異なる方法 (固有の実行計画) を考え出す必要があります。

すべての仕入先から配送される品目を検索します。

私のデータベースには次のテーブルがあります。

QSPL – サプライヤー名のリストを保持します

  • SPLNO (番号)
  • SPLNAME (varchar)

QDEL – 配送品目、サプライヤー、および部門を保持します

  • デルノ(数)
  • DELQTY (数値)
  • ITEMNAME (varchar)
  • DEPTNAME (varchar)
  • SPLNO (番号)

QITEM – アイテムのリストを保持します

  • ITEMNAME (varchar)
  • ITEMTYPE (varchar)
  • ITEMCOLOR (varchar)

次の 4 つのユニークなクエリを思いつくことができました。

1.

select itemname --, etc.
from qitem
where itemname not in
(select itemname
from qitem, qspl
where (char(splno)+itemname) not in
(select char(splno)+itemname
from qdel));

2.

select itemname --,etc.
from qitem
where not exists
    (select *
    from qspl
    where not exists
        (select *
from qdel
where qdel.itemname = qitem.itemname
and Qdel.splno = qspl.splno));

3.

select a.itemname --, etc
from qitem a join qdel b on a.itemname = b.itemname
group by a.itemname
having count (distinct splno) = (select count(*) from qspl);

4.

select itemname
from qdel
group by itemname
having count (distinct splno) = (select count(*) from qspl);

5 番目の一意のクエリに対して何をすべきかわかりません。誰も手がかりを持っていますか?

私はこの質問を可能な限り詳細に説明しようとしましたが、フィードバックは大歓迎です。

ありがとう

4

3 に答える 3

1

おそらくいくつかの SQL 86 構文:

select a.itemname --, etc
from qitem a, qdel b 
where a.itemname = b.itemname
group by a.itemname
having count (distinct splno) = (select count(*) from qspl);

または外部結合

select a.itemname --, etc
from qspl s, qdel b 
WHERE s.splno (+)= b.splno
group by s.splno
having count (distinct b.splno) = (select count(*) from qspl);
于 2013-09-23T20:34:50.120 に答える