仅当列与MYSQL中另一个表的列中的值不匹配时,才从一个表中选择值

时间:2014-11-04 10:53:54

标签: 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在表格inmeeting中(这意味着用户在场),那就是该特定会议的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

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

2 个答案:

答案 0 :(得分:2)

最好使用LEFT OUTER JOIN并检查是否匹配(即,在LEFT JOINED表中的列的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;

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