如何仅为特定列选择具有多个匹配的行?

时间:2011-01-23 05:29:04

标签: sql

我不知道如何用这句话来表达,所以我举一个例子:

假设有一个名为tagged的表格,其中有两列:taggertaggee。 SQL查询返回多行中的taggee会是什么样的?也就是说,它们被任何tagger标记了2次或更多次。

我想要一个'通用'SQL查询,而不是仅适用于特定DBMS的东西。

编辑:添加“任何标记器标记2次或更多次。”

2 个答案:

答案 0 :(得分:9)

HAVING可以对聚合函数的结果进行操作。所以如果你有这样的数据:

Row    tagger  |  taggee
       --------+----------
1.     Joe     |  Cat
2.     Fred    |  Cat
3.     Denise  |  Dog
4.     Joe     |  Horse
5.     Denise  |  Horse

听起来你想要

要获取多行的标记,您可以执行:

SELECT taggee, count(*) FROM tagged GROUP BY taggee HAVING count(*) > 1

话虽如此,当您说“仅选择具有特定列的多个匹配的行”时,您想要哪个?您想要Cat的行 1 ,还是 2 行?

答案 1 :(得分:0)

select distinct t1.taggee from tagged t1 inner join tagged t2 
        on t1.taggee = t2.taggee and t1.tagger != t2.tagger;

将为您提供已被多个标记器标记的所有标记