0
select文を作成しようとしています。サブクエリのすべてのレコードを含むレコードを選択したい。彼らはこれらの部品のすべてを販売している場合すべてのサブクエリ結果が含まれているレコードを選択します。
SELECT P.pid
FROM Parts P
INNER JOIN Manifacturers M INNER JOIN M.mid ON P.pid
WHERE M.name = 'Mercedes'
私はサプライヤーを選択する:
は、私のようなサブクエリを持っています。私はいくつかのことを試しました:
SELECT s.name
FROM Suppliers S
INNER JOIN Parts P1 ON S.pid = P1.pid
WHERE p1.pid IN (SELECT P.pid
FROM Parts P
INNER JOIN Manifacturers M INNER JOIN M.mid ON P.pid
WHERE M.name = 'Mercedes')
これは明らかに失敗しました。これは、部品があればサプライヤに返します。実際に私は、INTERSECTを使用することにより近づけるために管理:
SELECT P1.pid
FROM Suppliers S
INNER JOIN Parts P1 ON S.pid = P1.pid
INTERSECT
SELECT P.pid
FROM Parts P
INNER JOIN Manifacturers M INNER JOIN M.mid ON P.pid
WHERE M.name = 'Mercedes'
これは正しいPIDを返しますが、この構文は私がs.nameを返却することはできません。 2番目のクエリに存在しないフィールドを追加することはできません。
@Matt 'CASE'を修正してください。しかし、どのように派生テーブルを簡略化することができないのか分かりません。LEFT JOINを実行する前に、すべての部品とサプライヤをベースにしておく必要があります。 –
ああ、私はそれを見ています...最初はメーカーとの結合を使用します。 「ピッド」を持つ。 –
ああ、ちょうど私がそれがないときれいだったと思ったのはどちらの方法でも大したことではない。いい答えだ – Matt