SQL:从两列中选择不同,其中只有column2不同

时间:2013-04-29 20:01:34

标签: mysql sql

我在生成查询时遇到了问题(而且我已经在线查看过,而且无法找到它)。我想要选择不同的两列,其中只有第二列不同。

理想情况下,它看起来像这样:

SELECT DISTINCT colA, colB
FROM table
GROUP BY colA, colB

条件是colB只是不同

例如,这就是我想要它做的事情,以防我说的不清楚

colA | colB
-----------
abc  |1
abc  |2
abd  |1
abf  |1
xyz  |1
asd  |2

SQL MAGIC

calA | colB
-----------
abc  |1
abc  |2

它基本上删除了colB不同的行。

谢谢!

5 个答案:

答案 0 :(得分:4)

JOIN解决方案是:

 SELECT DISTINCT a.*
 FROM table a
 JOIN table b
    ON  a.colA  = b.colA
    AND a.colB != b.colB 

答案 1 :(得分:3)

根据您的示例输出,如果它们具有多个不同的colA值,则您看起来只包含colB个值。你可以这样做:

SELECT colA, colB FROM table
WHERE colA IN (
  SELECT colA
  FROM table
  GROUP BY colA
  HAVING COUNT(DISTINCT colB) > 1)

答案 2 :(得分:1)

你可以做到

SELECT MIN(colA) AS colA, colB
FROM table
GROUP BY colB

SELECT MAX(colA) AS colA, colB
FROM table
GROUP BY colB

但你的问题有点不清楚,所以我不确定这是你要求的,或者不是。

答案 3 :(得分:1)

要获得具有多个B值的列A值,您可以使用带有group by子句的having

SELECT colA
FROM table
GROUP BY colA
having min(colB) <> max(colB)

然后你需要join以某种方式回到原始查询中。以下是使用in的方法:

select *
from table
where colA in (SELECT colA
               FROM table
               GROUP BY colA
               having min(colB) <> max(colB)
              )

您也可以将having比较替换为having count(distinct colB) > 1,但我认为min() / max()比较通常会有更好的效果。

答案 4 :(得分:0)

select colA, colB
from table
where colA in (select colA from table group by colA having count(*) > 1)
order by colA, colB