MySQL:数组比较

时间:2017-05-29 12:56:56

标签: mysql arrays

所以,我有一个客户表和标签表。 一个客户端有很多标签。 我想选择所有具有特定标签集的客户端。 例如,让我们选择所有具有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的客户端?

2 个答案:

答案 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
  

演示: http://sqlfiddle.com/#!9/7e4d20/1/0

此查询仅返回包含(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);