2014-11-04 43 views
0
匹配另一个表的列中的值

我使用这个查询:选择值仅如果列不MYSQL

SELECT u.name, u.lastname, u.username 
FROM users AS u, inmeeting AS i 
WHERE i.memo='7' AND i.user = u.keyid 

要获得所有用户的数据,如果keyid的该用户在表中记录(这意味着用户在场)为特定会议的id(这就是为什么i.memo = 7)。

现在我想编写另一个查询,以获取所有其他未参加该会议的其他人的所有用户数据。我这样写:

SELECT u.name, u.lastname, u.username 
FROM users AS u, inmeeting AS i 
WHERE i.memo='7' AND i.user <> u.keyid 

然而,这个查询让我每次用户两次!我不明白我做错了什么或者如何做对(嗯,我认为最后一个可以用子查询来完成,但我希望有更优雅的东西)。有任何想法吗?

回答

0

您可以用

SELECT 
    u.name, u.lastname, u.username 
FROM 
    users AS u 
WHERE 
    u.keyid NOT IN (SELECT i.user FROM inmeeting WHERE i.memo='7') 
+0

jaja这正是我所做的。很高兴知道我们同意。我会检查你的答案是否正确,因为它是我想要的。 – aarelovich 2014-11-04 11:14:53

2

最佳尝试使用LEFT OUTER JOIN和检查不匹配(即检查为左连接表的列WHERE子句中的NULL): -

SELECT u.name, u.lastname, u.username 
FROM users AS u 
LEFT OUTER JOIN inmeeting AS i 
ON i.user = u.keyid 
AND i.memo='7' 
WHERE i.user IS NULL; 
+0

这就是我所要求的(没有子查询)。如果可以的话,我会尽力的,但是由于另一种方式起作用,我保留这一点。谢谢你的回答! – aarelovich 2014-11-04 11:29:09

+0

那么,据我测试这个小提琴[链接] http://sqlfiddle.com/#!2/7b332/1(因为我有同样的想法)它不起作用:( – Olli 2014-11-04 11:36:12

+1

我的错。现在修复它。这应该比使用子查询更快。 – Kickstart 2014-11-04 11:58:19

相关问题