所以我有以下内容:
一个包含两列的查找表,例如:
userid moduleid
4 4
我还有一个用户表,其中包含查找表引用的主键userid
。用户表可以说有几个用户,如下所示:
userid
1
2
3
4
在此示例中,它显示ID为4的用户与模块ID 4匹配。其他用户与任何moduleid都不匹配。
我需要一个查询来获取来自users表的数据,其中moduleid不是4.在我的应用程序中,我知道模块但我不了解用户。因此查询应该返回除4之外的其他用户ID,因为4已经与模块ID 4匹配。
这可能吗?
答案 0 :(得分:0)
我想我理解你的问题。您可以使用子查询使用NOT IN()
函数交叉检查两个表之间的数据。
以下将从userid
表中选择user_tbl
表中不存在的所有lookup_tbl
记录:
SELECT `userid`
FROM `user_tbl`
WHERE `userid` NOT IN (
SELECT DISTINCT(`userid`) FROM `lookup_tbl` WHERE moduleid = 4
)
答案 1 :(得分:0)
有几种方法可以做到这一点,一种非常直观的方式(在我看来)是使用in
谓词在查找表中排除具有moduleid 4的用户:
SELECT * FROM Users WHERE UserID NOT IN (SELECT UserID FROM Lookup WHERE ModuleID = 4)
还有其他方法,可能有更好的性能(例如使用相关的不存在查询或连接)。
答案 2 :(得分:0)
另一个选项是使用LEFT JOIN
,这样即使没有匹配项,您也可以从两个表中获取值。然后,从查找表中选择没有userid
值的行。
SELECT u.userid
FROM usersTable u
LEFT JOIN lookupTable lt ON u.userid = lt.userid
WHERE lt.userid IS NULL
答案 3 :(得分:-3)
你在寻找这样的查询吗?
从yourtablename中选择userid,其中moduleid<> 4