2012-09-17 52 views
1

我有表格式如下:MySQL的左連接的子查詢

tag | item 
---------- 
1 | 1 
2 | 2 
2 | 3 
3 | 1 
3 | 2 
3 | 3 

我必須選擇這些標籤,這是目前在集它的每一個項目。

例如:

項= {2,3} - >代碼{2,3},第2項具有標記2,3,第3項有標籤2,3,共同標記爲2,3-

items = {1,2,3} - > tags {},item 1 has tags 1,3,item 2 has tags 2,3,item 3 has tags 2,3,common tags are 3

items = {1,3} - > tags {3},item 1 has tags 1,3,item 3 has tags 2,3,common tags are 3

作爲輸入,我有一組項目。我不知道如何編寫這樣的查詢。

感謝您的回覆。

+0

因此,你給出了一個項目列表,你想要該列表的通用標籤?或者只是一個項目和通用標籤的列表? – gbn

+0

我有一個項目列表,並希望有一個共同的標籤 – user1677674

回答

0

查詢解決你的問題是(假設標籤和項目沒有重複的條目)

SELECT tag FROM <table_name> 
WHERE item IN (<items to be searched seperated by ,>) 
GROUP BY tag 
HAVING COUNT(*) = <number of items>; 

例如對於下面的查詢

SELECT GROUP_CONCAT(a.tag) FROM (
SELECT tag FROM <table_name> 
WHERE item IN (<items to be searched seperated by comma>) 
GROUP BY tag 
HAVING COUNT(*) = <no. of items>) AS a; 

希望它可以幫助項目{1,3}

SELECT tag FROM <table_name> 
WHERE item IN (1,3) 
GROUP BY tag 
HAVING COUNT(*) = 2; 

物品{1,2,3}

SELECT tag FROM <table_name> 
WHERE item IN (1,2,3) 
GROUP BY tag 
HAVING COUNT(*) = 3; 

對於用逗號分隔的使用效果看。 ..

1

我認爲你正在尋找共享相同標記的項目列表,對吧?

此查詢應該爲您做。它由內部摘要查詢組成,內部摘要查詢將每個項目的標籤分組在一起,然後是將共享標籤組的項目組合在一起的外部摘要查詢。

SELECT GROUP_CONCAT(item ORDER by ITEM) items, tags 
    FROM (
      SELECT GROUP_CONCAT(tag ORDER BY tag) tags, item 
      FROM tbl 
     GROUP BY item 
     )t 
    GROUP BY tags 
    ORDER BY tags 

它返回,爲您的測試數據集,你的問題:

| ITEMS | TAGS | 
---------------- 
|  1 | 1,3 | 
| 2,3 | 2,3 | 

也就是說,你的第1項有標籤1和3。你的第二和第三項有標籤2和3

小提琴! http://sqlfiddle.com/#!2/6a927/3/0

+0

我有一個項目列表,我想知道,哪些項目共享相同的標籤,我沒有尋找所有的可能性。 – user1677674