次のクエリを実装する必要があります
SELECT *
FROM friend
WHERE ( friend.id1, friend.id2 )
NOT IN (SELECT id1,
id2
FROM likes)
nOT INは複数の列に実装できません。このクエリを記述する方法
あなたが考えるかどうかはわかりません:
select * from friend f
where not exists (
select 1 from likes l where f.id1 = l.id and f.id2 = l.id2
)
id1がid1とid2に関連し、id2が両方ではない場合にのみ機能します。
もう1つの不思議な未知のRDBMS。 PostgreSQLの構文はまったく問題ありません。他のクエリスタイル(特にNOT EXISTS
バリアントまたはLEFT JOIN
)はより高速に実行できますが、クエリは完全に正当です。
ただし、NULL
値を使用する場合は、NOT IN
の落とし穴に注意してください。
LEFT JOINのバリアント:
SELECT *
FROM friend f
LEFT JOIN likes l USING (id1, id2)
WHERE l.id1 IS NULL;
NOT EXISTS
バリアントについては、@Michałの回答を参照してください。
4つの基本的なバリアントのより詳細な評価: