我有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
答案 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;