MySql:选择项目什么都有值
我有3列的MySQL表:id,company_id和tag_id。 它用于将公司和标签链接在一起。 表模式:MySql:选择项目什么都有值
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
你可以试试这个:
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小提琴不会加载,但你可以给这个一试:
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;
感谢的答案,它的工作原理,但拉胡尔·帕蒂的答案是更全面的,因为DISTINCT。 – MihanEntalpo
没问题。我刚刚提出了他的答案,因为我知道它更好。 –
是的,它按预期工作!谢谢! – MihanEntalpo
@MihanEntalpo: - 不客气! –