从另一个表中不匹配的表中选择行

时间:2015-02-26 20:51:45

标签: mysql

所以我有以下内容:

一个包含两列的查找表,例如:

userid     moduleid
  4           4

我还有一个用户表,其中包含查找表引用的主键userid。用户表可以说有几个用户,如下所示:

userid
  1
  2
  3
  4

在此示例中,它显示ID为4的用户与模块ID 4匹配。其他用户与任何moduleid都不匹配。

我需要一个查询来获取来自users表的数据,其中moduleid不是4.在我的应用程序中,我知道模块但我不了解用户。因此查询应该返回除4之外的其他用户ID,因为4已经与模块ID 4匹配。

这可能吗?

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