2012-03-27 114 views
0

我有一个表,看起来像这样:选择复制

 
id| country | 
=================== 
1 | Argelia | 
2 | USA  | 
3 | China | 
4 | Italy | 
4 | Italy | 
6 | USA  | 
7 | USA  | 
1 | Argelia | 

我想要选择重复国家的查询,但只有当ID不同。因此,从上面的表,查询会产生这样的:

 
id| country | 
=================== 
2 | USA  | 
6 | USA  | 
7 | USA  | 

意大利和Argelia重复的国家以及但是由于它们共享一个ID,他们不应该在输出中。我能做什么?

回答

4
SELECT c.id, 
     c.country 
FROM countries c 
     INNER JOIN (SELECT country, 
          COUNT(DISTINCT id) k 
        FROM countries 
        GROUP BY country 
        HAVING k > 1) t 
     ON c.country = t.country 

see it working

+0

他们想要的输出,其中的ID不匹配,我认为这将必须是一个子选择。 – Matthew 2012-03-27 18:55:50

+0

谢谢,但没有工作......它只是把计数考虑在内,而不关心值是否相等或不同,所以它也返回阿尔杰利亚和意大利。 – luqita 2012-03-27 18:57:27

+0

@Matthew doh我在想什么呢修好了 – 2012-03-27 19:01:57

0
SELECT country, COUNT(DISTINCT id) AS cnt, GROUP_CONCAT(id) 
FROM yourtable 
GROUP BY country, id 
HAVING cnt > 1 
+0

谢谢,但没有成功......它只是将计数考虑在内,而不关心数值是相等还是不同,所以它也返回阿尔及利亚和意大利。 – luqita 2012-03-27 18:57:36

+0

oops。尝试'COUNT(DISTINCT ID)'然后 – 2012-03-27 19:01:49

+0

不工作...... :( – luqita 2012-03-27 19:06:28