我在生成查询时遇到了问题(而且我已经在线查看过,而且无法找到它)。我想要选择不同的两列,其中只有第二列不同。
理想情况下,它看起来像这样:
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
不同的行。
谢谢!
答案 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