UNION ALL语句的MySQL COUNT结果

时间:2011-11-13 12:14:11

标签: mysql select union

我确信必须有办法做到这一点,但我的MySQL知识让我退缩。

我有一个存储页面标记的表

page_id          tag
51               New Zealand
51               Trekking
58               UK
77               New Zealand
77               Trekking
89               City Break
101              Shopping
...

我想搜索有两个标签的网页,例如“新西兰”和“徒步旅行”。我看过UNIONS,INTERSECT(equiv),JOINS,我无法弄清楚最好的方法是什么。我想出的最好的事情就是:

SELECT page_id FROM tags
WHERE tag = "New Zealand"
UNION ALL
SELECT page_id FROM tags
WHERE tag = "Trekking"
... and then some kind of COUNT on those pages that feature twice??

我基本上想要将两个搜索联合起来并“保留”重复项并丢弃其余部分。这可能是一种简单的方式,还是我需要开始变得复杂?

3 个答案:

答案 0 :(得分:3)

如果我理解正确的话,应该这样做:

SELECT page_id, count(*)
FROM tags
WHERE tag IN ('New Zealand', 'Trekking')
GROUP BY page_id
HAVING count(*) > 1

如果从同一个表中选择,则无需使用UNION。

答案 1 :(得分:0)

考虑到你希望 page_id 同时具有标签 “新西兰”“徒步旅行”

SELECT t1.page_id
FROM tags t1, tags t2
WHERE t1.page_id = t2.page_id
AND
t1.tag="New Zealand"
AND
t2.tag="Trekking"


似乎是正确的,嗯但检查一次......,如果我发现更容易和更准确,将会反击

答案 2 :(得分:-1)

试试这个

CREATE TABLE temporary
SELECT page_id FROM tags
WHERE tag = "New Zealand"
UNION ALL
SELECT page_id FROM tags
WHERE tag = "Trekking"

然后尝试这个

SELECT COUNT(*) FROM temporary

别忘了

DROP TABLE temporary