我有一张user
桌子:
id, userID, name, postcode
2 99 Bob AAA BBB
3 8384 Jim CCC DDD
我有一张user-keys
桌子:
id, userID, keyID, val
1 435 3 1
2 773 8 0
3 99 2 1
4 99 5 1
5 99 2 1
其中keyID
=2表示是职员。我想从user
不是工作人员的表中获取所有用户 ID 。到目前为止,我有以下 SQL:
SELECT u.`userID` FROM `users` u
WHERE u.`userID` IS NOT NULL AND u.`userID` != 0;
但是,这并不排除在user-keys
表中具有keyID
值为 2 和val
1的条目的所有用户。
我该如何执行此操作?
编辑:我忘了状态,任何用户可以在多个条目user-keys
表,我只想要一个列表userID
从user
表中,所以我真的很希望从上表的结果只会是8384。
您可以尝试以下连接查询:
SELECT
t1.userID
FROM user t1
LEFT JOIN
(
SELECT DISTINCT userID, keyID -- you don't need DISTINCT here, but it may help
FROM `user-keys` -- and it makes the logic a bit clearer
WHERE keyID = 2
) t2
ON t1.userID = t2.userID
WHERE t2.userID IS NULL
这里所用的逻辑是,我们保留从所有用户user
表谁不会出现在user-keys
有keyID
2个,或谁不会出现在user-keys
所有。
按照下面的链接查看 MySQL 中的演示。请注意,在某些数据库中user-keys
,表名不是有效的,需要进行转义(我在上面使用反引号进行了转义,SQL Server 将使用[user-keys]
等)。
更新:
如果只想找工作人员,那么逻辑就简单多了。在这种情况下,我们可以INNER JOIN
将两个表放在一起并检查每个用户的状态:
SELECT DISTINCT
t1.userID
FROM user t1
INNER JOIN `user-keys` t2
ON t1.userID = t2.userID
WHERE t2.keyID = 2
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句