PHP / MYSQL查询,如果不在第二个表中

时间:2012-11-15 11:19:00

标签: php mysql

我有两张桌子。我想绘制第一个表的样本,除非第一个表中的人也在第二个表中。我在查看看似简单的查询时遇到了麻烦。

表用户

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'

和变化无济于事。非常感谢任何建议。

3 个答案:

答案 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是否为空,只包含带有类别的行。

请注意,如果用户属于多个类别,则该连接可能会多次返回用户。