2015-11-06 82 views
2

我有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

回答

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

是的,它按預期工作!謝謝! – MihanEntalpo

+0

@MihanEntalpo: - 不客氣! –

0

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

沒問題。我剛剛提出了他的答案,因爲我知道它更好。 –