如果表中的SELECT字段记录与另一个两列表中的记录不匹配,则记录该字段

时间:2013-10-20 22:51:05

标签: multiple-columns multiple-tables

我真的很喜欢这个奇怪的代码,但我找不到我想要的东西 我在你精彩的网站上搜索了一个答案,因为我在这里找到了答案,但没有找到答案

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

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

如果你看这里:

表1

用户名

USER1 用户2 用户3 USER4 USER5

表2

你|朋友

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

所以基本上我想要的是在表1和表2中永远不会匹配'user1'的记录 我也不希望在列的另一边和vise-verse

匹配'user1'

总之,我希望字段用户名的返回符合顺序 'USER4' 'USER5'

所以现在你有了这个链接的图片Live demo

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

感谢。

1 个答案:

答案 0 :(得分: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)
  )