1

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

表用户

id|name

表猫用户

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'

和变化无济于事。将不胜感激任何建议。

4

3 回答 3

2

怎么样。这个:

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
于 2012-11-15T11:21:21.247 回答
2
SELECT * FROM users WHERE id NOT IN (SELECT DISTINCT userid FROM catuser)
于 2012-11-15T11:27:52.180 回答
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 字段将为空。通过检查是否c.id不为空,您只包含具有类别的行。

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

于 2012-11-15T11:27:50.427 回答