我有两张桌子。我想绘制第一张桌子的样本,除非第一张桌子上的人也在第二张桌子上。在执行这个看似简单的查询时遇到了麻烦。
表用户
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'
和变化无济于事。将不胜感激任何建议。
怎么样。这个:
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
SELECT * FROM users WHERE id NOT IN (SELECT DISTINCT userid FROM catuser)
如果您只想查询具有一个或多个类别的用户,您可以使用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
不为空,您只包含具有类别的行。
请注意,如果用户属于多个类别,则连接可能会多次返回用户。