1

我在生成查询时遇到了问题(我在网上查看过,但找不到)。我想选择不同的两列,其中只有第二列不同。

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

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 魔法

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

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

谢谢!

4

5 回答 5

4

一个JOIN解决方案是:

 SELECT DISTINCT a.*
 FROM table a
 JOIN table b
    ON  a.colA  = b.colA
    AND a.colB != b.colB 
于 2013-04-29T20:11:07.807 回答
3

根据您的示例输出,您似乎只包含colA具有多个不同值的colB值。你可以这样做:

SELECT colA, colB FROM table
WHERE colA IN (
  SELECT colA
  FROM table
  GROUP BY colA
  HAVING COUNT(DISTINCT colB) > 1)
于 2013-04-29T20:07:09.680 回答
1

你可以做

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

或者

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

但是您的问题有些不清楚,所以我不确定这是否是您要的。

于 2013-04-29T20:05:39.147 回答
1

要获取具有多个 B 值的列 A 值,可以使用 a group bywith ahaving子句:

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()比较通常会表现更好。

于 2013-04-29T20:06:41.537 回答
0
select colA, colB
from table
where colA in (select colA from table group by colA having count(*) > 1)
order by colA, colB
于 2013-04-29T20:23:53.500 回答