2012-10-03 18 views
0

用下面簡單的表結構:返回的所有行的關係匹配的整個列表(相對於的任意組合)

Data 
---------- 
id 

Tag 
---------- 
id 

TaggedData 
---------- 
id 
tag_id 
data_id 

如果我有標籤ID的列表,我怎麼會每次取數據行,我的列表中的每一行標記與一行數據匹配,而不是其子集?

這裏的查詢我已經把現在不工作:

SELECT 
     Data.* 

    FROM 
     Data 
    LEFT JOIN 
     TaggedData ON (Data.id = TaggedData.data_id) 
    LEFT JOIN 
     Tag ON (Tag.id = TaggedData.tag_id) 

    WHERE 
     Tag.id IN ('1' , '2') 

具體做法是:這一個是不工作,因爲它會返回一個就是標籤1或2。不相關的數據的任何行1 2.

回答

1

這就是所謂的 「關係部門」

SELECT 
     Data.ID 
    FROM 
     Data 
    INNER JOIN 
     TaggedData ON (Data.id = TaggedData.data_id) 
    INNER JOIN 
     Tag ON (Tag.id = TaggedData.tag_id) 
    WHERE 
     Tag.id IN ('1' , '2') 
    HAVING COUNT(DISTINCT tag.iD)=2 
+0

哇!今天回家知道至少有一個人在這個世界上認爲你是非常聰明的。 –

相關問題