1

私は本当にこの奇妙なコードに多くの作業をしましたが、私が探しているものが見つかりません

ただし、最初のテーブルに 1 つの列を、もう 1 つのテーブルに 2 つの列を含む 2 つのテーブルがあります。

最初のテーブル (1 列のテーブル) で、2 番目のテーブルの列に一致しないすべてのレコードを選択したいと考えています。

ここを見ると:

表1

ユーザー名

ユーザー1 ユーザー2 ユーザー3 ユーザー4 ユーザー5

表 2

あなた | 友達

('user1', 'user2') ('user2', 'user3') ('user3', 'user1') ('user4', 'user3')

基本的に、テーブル1とテーブル2の「user1」と一致しないレコードも必要です。また、列の反対側と万力の反対側で「user1」と一致するものも必要ありません

結論として、フィールドusernameの戻り値を「user4」「user5」の順序にしたい

だから今、あなたは写真を持っています 私はこのリンクを持っていますライブデモ

したがって、DB の書き込みについて心配する必要はありません。

ありがとう。

4

1 に答える 1

0

OPとの会話に続く更新された回答は次のとおりです:-

SELECT username
FROM (
  SELECT username FROM users
  UNION
  SELECT you FROM friends
  UNION
  SELECT friend FROM friends
) everybody
WHERE everybody.`username` != 'user1'

最後の文字列でテストされているユーザー名を置き換えます。

UNION はデフォルトで DISTINCT を実行し、余分な結果を削除します。

======================ここからの元の回答======================

私はあなたの質問を理解していません - しかし、これはあなたにどこから始めるべきかのアイデアを与えるかもしれません...

SELECT username
FROM users
WHERE username NOT IN (
  SELECT you
  FROM friends
  UNION
  SELECT friend
  FROM friends
  )

特にEXISTSをカバーするインデックスが存在する場合、これはおそらくより効率的です:-

SELECT u.username
FROM users u
WHERE NOT EXISTS (
  SELECT *
  FROM friends f
  WHERE (f.you=u.username OR f.friend=u.username)
  )
于 2013-10-20T23:05:10.800 に答える