查找表

时间:2015-07-30 12:51:24

标签: mysql sql

让我们说在几个SELECTJOIN之后的某个时刻,我得到以下结果:

  Col1   Col2
+------+------+
|  1   |   2  |
|  1   |   3  |
|  4   |   5  |
|  4   |   6  |
|  5   |   6  |
|  6   |   7  |
+------+------+

现在我想找到"不一致",即显示Col1中具有相同值但Col2中的值不同的行。如果Col1中只出现一次值,那么我根本不想显示它。

我尝试过的事情:

select Col1, Col2
from Table1
    group by Col1
    having (count(*) > 1)

返回

  Col1   Col2
+------+------+
|  1   |   2  |
|  4   |   5  |
+------+------+

预期结果:

  Col1   Col2
+------+------+
|  1   |   2  |
|  1   |   3  |
|  4   |   5  |
|  4   |   6  |
+------+------+

3 个答案:

答案 0 :(得分:2)

select t1.* from  
 (select col1,count(*)
  from table1
  group by col1
  having count(*) > 1) t2
join table1 t1 on t1.c1 = t2.c1

在找到>的计数后,您应该使用外部查询。 1。

SQL小提琴:http://sqlfiddle.com/#!9/211a9e/6

答案 1 :(得分:1)

SELECT * FROM Table1 WHERE Col1 IN (
  SELECT Col1 FROM Table1 GROUP BY Col1 HAVING COUNT(Col1) > 1
);

http://sqlfiddle.com/#!9/8de26/2

答案 2 :(得分:0)

你应该使用这个而不是那些:

select Col1, Col2
from Table1
    sort by Col1
    having (count(*) > 1)