MySql:选择具有所有值

时间:2015-11-06 08:22:39

标签: mysql

我有3列的Mysql表:id,company_id和tag_id。 它用于将公司和标签链接在一起。 表模式:

CREATE TABLE tbl_company_tag_link (
  id BIGINT NOT NULL AUTO_INCREMENT,
  company_id BIGINT NOT NULL,
  tag_id BIGINT NOT NULL,
  PRIMARY KEY(id)
);

任何公司都可以与任意数量的标签相关联。 我需要选择附有所有指定标签的公司。 例如,我需要具有tag_id = 1,2,3的company_id(所有这些!) 我遇到的问题很难看:

SELECT company_id, GROUP_CONCAT(tag_id) as group_concat_tag_id
FROM tbl_company_tag_link
WHERE tag_id IN (1,2,3)
GROUP BY company_id
HAVING group_concat_tag_id = "1,2,3"

我需要帮助编写查询,这会很快。

我已经使用我的架构和查询创建了sqlfiddle以进行快速测试:http://sqlfiddle.com/#!9/2416f/2

为时已晚,找到了相同的问题并提供了详细的答案:Need help with sql query to find things tagged with all specified tags

2 个答案:

答案 0 :(得分:2)

你可以试试这个:

SELECT company_id
FROM tbl_company_tag_link
WHERE tag_id IN (1,2,3)
GROUP BY company_id
HAVING COUNT(DISTINCT tag_id ) = 3

<强> SQL FIDDLE DEMO

答案 1 :(得分:0)

SQL Fiddle没有加载,但你可以尝试一下:

SELECT company_id, GROUP_CONCAT(tag_id) as group_concat_tag_id
FROM tbl_company_tag_link
WHERE tag_id IN (1,2,3)
GROUP BY company_id
HAVING COUNT(*) = 3;