我真的很喜欢这个奇怪的代码,但我找不到我想要的东西 我在你精彩的网站上搜索了一个答案,因为我在这里找到了答案,但没有找到答案
但是,我有两个表,其中包含第一个表中的一列和另一个表中的两列。
我想选择第一个表(一个列表)中第二个表列中不匹配的所有记录。
如果你看这里:
USER1 用户2 用户3 USER4 USER5
和
('user1','user2') ('user2','user3') ('user3','user1') ('user4','user3')
所以基本上我想要的是在表1和表2中永远不会匹配'user1'的记录 我也不希望在列的另一边和vise-verse
匹配'user1'总之,我希望字段用户名的返回符合顺序 'USER4' 'USER5'
所以现在你有了这个链接的图片Live demo
所以你不必担心写任何数据库
感谢。
答案 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)
)