所以,我有一个客户表和标签表。 一个客户端有很多标签。 我想选择所有具有特定标签集的客户端。 例如,让我们选择所有具有id为1和9
的标签的客户端SELECT clients.id from clients
INNER JOIN tags ON clients.id = tags.client_id
WHERE tags.id IN (1, 9)
GROUP BY clients.id
这对我不起作用,因为此类查询将返回所有具有1,9或1和9的客户端
我怎样才能只返回同时拥有1和9的客户端?
答案 0 :(得分:1)
您可以使用HAVING
:
SELECT clients.id FROM clients
INNER JOIN tags ON clients.id = tags.client_id
WHERE tags.id IN (1, 9)
GROUP BY clients.id
HAVING COUNT(DISTINCT tags.id) = 2
此查询仅返回包含(1和9而非1或9)标记的行。如果您更改IN
上的代码数量,则必须更改HAVING
的数字。
答案 1 :(得分:1)
即使您已经接受了答案,这是另一种变体:
SELECT clients.id
FROM clients
LEFT JOIN tags ON clients.id = tags.client_id
WHERE tags.id IN (1, 9);