【发布时间】:2009-07-30 09:36:11
【问题描述】:
除了这个问题SQL query that gives distinct results that match multiple columns 这有非常巧妙的解决方案,我想知道下一步会如何:
DOCUMENT_ID | TAG
----------------------------
1 | tag1
1 | tag2
1 | tag3
2 | tag2
3 | tag1
3 | tag2
4 | tag1
5 | tag3
因此,要获取所有具有标签 1 和 2 的 document_id,我们将执行如下查询:
SELECT document_id
FROM table
WHERE tag = 'tag1' OR tag = 'tag2'
GROUP BY document_id
HAVING COUNT(DISTINCT tag) = 2
现在,有趣的是,我们将如何获得所有具有标签 1 和 2 的不同 document_id,以及除此之外的具有标签 3 的 id。 我们可以想象进行相同的查询并在它们之间执行联合:
SELECT document_id
FROM table
WHERE tag = "tag1" OR tag = "tag2"
GROUP BY document_id
HAVING COUNT(DISTINCT tag) = 2
UNION
SELECT document_id
FROM table
WHERE tag = "tag3"
GROUP BY document_id
但我想知道如果添加了该条件,我们是否可以考虑另一个初始查询。我想象有许多像这样具有不同标签和标签计数的“联合”。 创建这样的工会链在性能方面不是很糟糕吗?
【问题讨论】:
标签: performance mysql many-to-many