我正在使用此查询:
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
然而,这个查询让我每个用户两次!我不明白我做错了什么或怎么做对(好吧,我认为最后一个可以用子查询来完成,但我希望有一些更优雅的东西)。有什么想法吗?
答案 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')