2011-01-17 9 views
1

SNo、PNo、JNo、およびQuantityを持つSPJというテーブルがあります。 SQL文の問題は次のとおりです。このSQL SELECT文を実行するにはどうすればよいですか?

パートP3を提供するがパートP5を提供しないサプライヤのサプライヤの番号を取得します。

これは単純なはずですが、正しい結果を返すことができません。

パート3ではなく5である唯一のものであるため、「S3」を返すはずですが、NOTの組み合わせである<>などが使用されても、両方を供給しているサプライヤの数が常に返されます。

+5

2つのことは、それは良い質問になります「どこにいない存在」。 (1)サンプルデータ、(2)あなたが試したクエリ。 – Nishant

+2

宿題のような音。 –

+0

試験改訂の実際のサンプルの質問... –

答えて

3
SELECT sno 
FROM (
     SELECT DISTINCT sno 
     FROM spj 
     WHERE pno = 3 
     ) q 
WHERE sno NOT IN 
     (
     SELECT sno 
     FROM spj 
     WHERE pno = 5 
     ) 
+0

これはすごく感謝します!そのqは正確に何ですか? –

+0

@Chris Edwards 'q'はサブクエリのエイリアスです。あなたは構文エラー(少なくともいくつかのDBMSでは、少なくともそれ)をそれなしで取得します。 WHERE句のサブクエリには同じことは必要ではないことに注意してください。 –

0

EXCEPT句をルックアップします。

これは2段階のことです。パート3のリストをコンパイルし、Part 5の別のリストを削除して削除する必要があります。 EXCEPT句はこれを行う1つの方法です。それとも、使用することができます

+0

'MySQL'は' EXCEPT'をサポートしていません – Quassnoi

0
select distinct sno # distinct in case of duplicates 
from spj A 
left join spj B on A.sno = B.sno and B.pno = 5 # same supplier supplies part 5 
where A.pno = 3 # supplies part 3 
    and B.sno is null # no match on left join 
関連する問題