次のクエリを実装する必要があります。
SELECT *
FROM friend
WHERE ( friend.id1, friend.id2 )
NOT IN (SELECT id1,
id2
FROM likes)
ただしNOT IN
、複数の列に実装することはできません。このクエリの書き方
次のクエリを実装する必要があります。
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 に関連付けられている場合にのみ機能します。
別の不可解な未知の RDBMS。あなたの構文はPostgreSQLで完全に問題ありません。他のクエリ スタイル (特にNOT EXISTS
バリアントまたは a LEFT JOIN
) はより高速に実行される可能性がありますが、クエリは完全に正当です。
ただし、値NOT IN
を含む場合は、の落とし穴に注意してください。NULL
LEFT JOIN を使用したバリアント:
SELECT *
FROM friend f
LEFT JOIN likes l USING (id1, id2)
WHERE l.id1 IS NULL;
NOT EXISTS
バリアントについては、@Michałの回答を参照してください。
4 つの基本的なバリアントのより詳細な評価:
おそらくNOT EXISTS
複数の列に使用する必要があります。