0

我需要识别重复某个值的行。这是一个示例表:

COUNTRY         CITY
Italy           Milan
Englad          London
USA             New York
Canada          London
USA             Atlanta

查询应该返回...

COUNTRY         CITY
Englad          London
Canada          London

...因为伦敦是重复的。预先感谢您的帮助。

4

4 回答 4

4

最简单的方法是使用子查询来计算每个城市出现的次数(并过滤到那些出现多次的值):

SELECT * FROM Cities
WHERE City in
(
    SELECT City FROM Cities
    GROUP BY City
    HAVING COUNT(*) > 1
)
于 2013-09-30T21:27:22.020 回答
2
select country, city 
from aTable
where city in
(
    select city
    from aTable
    group by city
    HAVING count(1) > 1
)

在这里试试:http ://sqlfiddle.com/#!3/e9b1a/1

或者,如果同一个城市和国家组合出现两次,而您只对国家不同的地方感兴趣:

select distinct country, city 
from aTable
where city in
(
    select city
    from aTable
    group by city
    HAVING count(distinct country) > 1
)

在这里试试:http ://sqlfiddle.com/#!3/2dfaa/2

于 2013-09-30T21:27:36.280 回答
2

如果您的 DBMS 支持窗口聚合。

SELECT COUNTRY,
       CITY
FROM   (SELECT COUNTRY,
               CITY,
               COUNT(*) OVER (PARTITION BY CITY) AS Cnt
        FROM   Cities) T
WHERE  Cnt > 1 

SQL小提琴

于 2013-09-30T21:27:47.097 回答
0

这个有效。从我妻子那里得到的(她终于有时间研究这个)。以为你可能会感兴趣。

SELECT * FROM Cities WHERE City in ( select city
from (SELECT City, count(distinct country) FROM Cities
GROUP BY City
HAVING count(distinct country) > 1) a)

于 2013-10-01T18:03:09.273 回答