我有两张桌子。我想绘制第一个表的样本,除非第一个表中的人也在第二个表中。我在查看看似简单的查询时遇到了麻烦。
表用户
id|name
表catuser
id|userid|catid
我试过了
SELECT u.*,c.userid FROM `users` u
LEFT JOIN `catuser` c
ON (u.id = c.userid AND c.userid <> '197')
WHERE u.id = '1'
和变化无济于事。非常感谢任何建议。
答案 0 :(得分:2)
如何abt。这样:
SELECT u.*,c.userid
FROM `users` u
LEFT JOIN `catuser` c
ON u.id = c.userid
WHERE u.id = '1'
AND c.userid <> '197'
AND c.userid is null
答案 1 :(得分:2)
SELECT * FROM users WHERE id NOT IN (SELECT DISTINCT userid FROM catuser)
答案 2 :(得分:0)
如果您只想查询包含一个或多个类别的用户,可以使用WHERE EXISTS
查询:
SELECT u.* FROM `users` u
WHERE EXISTS (SELECT * FROM catuser WHERE catuser.userid = u.id)
另一种可能性是进行左连接,并检查连接是否成功检查null:
SELECT u.*, c.* FROM `users` u
LEFT JOIN catuser c ON u.id = c.userid
WHERE c.id IS NOT NULL
如果catuser中没有对应的行,则所有catuser字段都将为null。通过检查c.id
是否为空,只包含带有类别的行。
请注意,如果用户属于多个类别,则该连接可能会多次返回用户。