私はテーブルaccounts
(id、full_name)とaccount_friends
(account_id、friend_id)を持っています。 friend_idは基本的に別のユーザーのアカウントIDです。 account id = 1のユーザーがまだ友だちになっていないアカウントをすべて見つけるにはどうすればよいですか?ユーザーがまだ友だちになっていない「accounts」を見つけた
@OMG Poniesへの回答として。
基本的に、これは複数の結合が必要であることを理解しています。私は左を理解していないけど
SELECT
a2.id
FROM
accounts a1
/* left/right join a1 with account_friends */
INNER JOIN
accounts a2
ON
af1.friend_id = a2.id
WHERE
a1.id;
/右ではない、友人のエントリを見つけるのトリックを行う必要がありますビットへの参加:私のロジックは次のようになります。この上記のクエリをコメントで述べたantonis_wrxよう
SELECT id, full_name
FROM accounts
WHERE id NOT IN (SELECT friend_id
FROM account_friends
WHERE account_id = 1)
AND id <> 1
:
が、1が2と友人であれば、それは我々が(ACCOUNT_ID = 2、friend_id = 1)で終わるの代わりに、(可能性があります1,2)? –
@ant良い点は、私は友情が各ユーザーの一方向であり、複製されていると仮定しましたが、それが真でない場合の別のクエリを追加します。 – staticbeast