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 FIDDLE DEMO

+1

是的,它按预期工作!谢谢! – MihanEntalpo

+0

@MihanEntalpo: - 不客气! –

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; 
+0

感谢的答案,它的工作原理,但拉胡尔·帕蒂的答案是更全面的,因为DISTINCT。 – MihanEntalpo

+0

没问题。我刚刚提出了他的答案,因为我知道它更好。 –