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 相关的任何数据行。不是 12。

4

1 回答 1

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
于 2012-10-03T15:26:44.630 回答