SQL:选择不同于仅列2不同的两列
我在生成查询时遇到了问题(我在网上查找并找不到它)。我想要选择不同的两列,其中只有第二列是不同的。SQL:选择不同于仅列2不同的两列
理想的情况下,它应该是这样的:
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
所不同的行。
谢谢!
一个JOIN
的解决方案是:从
SELECT DISTINCT a.*
FROM table a
JOIN table b
ON a.colA = b.colA
AND a.colB != b.colB
我喜欢这个解决方案! – 2013-04-29 20:13:27
如果colB的值超过两个,将会添加重复项。 – 2013-04-29 20:25:23
@AlvinThompson:啊,'DISTINCT'的晦涩含义... – Wrikken 2013-04-29 20:28:08
你可以做
SELECT MIN(colA) AS colA, colB
FROM table
GROUP BY colB
或
SELECT MAX(colA) AS colA, colB
FROM table
GROUP BY colB
,但你的问题是有些不清楚,所以我不知道这是你在问什么,还是不行。
要与乘数b计价得到该列的值,可以使用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 count(distinct colB) > 1
更换having
比较,但我觉得min()
/max()
比较通常会表现得更好。
在您的查询中,您已按ColB分组,因此“MIN(ColB)”总是等于MAX(ColB)吗? – GarethD 2013-04-29 20:09:02
根据您的示例输出,它看起来像只包含colA
的值(如果它们具有多个),但不同的值为colB
。你可以是这样做的:
SELECT colA, colB FROM table
WHERE colA IN (
SELECT colA
FROM table
GROUP BY colA
HAVING COUNT(DISTINCT colB) > 1)
是的,这是我正在寻找的措辞。这是完全正确的。我会尽快解决。谢谢!!! – 2013-04-29 20:10:07
很高兴工作!我可以理解这是多么难;我自己有很多麻烦:) – 2013-04-29 20:11:03
但是这不会给@ChristopherBales寻找的输出。它代替了他的计数。 – 2013-04-29 20:20:26
select colA, colB
from table
where colA in (select colA from table group by colA having count(*) > 1)
order by colA, colB
不同? – 2013-04-29 20:03:15
使用计数,然后做计数> 1时 – Andrew 2013-04-29 20:03:19