1

我真的在这个奇怪的代码上做了很多工作,但是我找不到我要找的东西

但是,我有两个表,其中包含假设第一个表中的一列和另一列中的两列。

我想选择第一个表(单列表)中与第二个表列不匹配的所有记录。

如果你看这里:

表格1

用户名

用户 1 用户 2 用户 3 用户 4 用户 5

表 2

你 | 朋友

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

所以基本上我想要在表 1 和表 2 中永远不匹配 'user1' 的记录,我也不想在列的另一侧和虎钳上匹配任何与 'user1' 匹配的东西

总之,我希望字段用户名的返回顺序为 'user4' 'user5'

所以现在你有图片我有这个链接现场演示

所以你不必担心写任何数据库

谢谢。

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 回答