2013-04-29 111 views
1

我在生成查詢時遇到了問題(我在網上查找並找不到它)。我想要選擇不同的兩列,其中只有第二列是不同的。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所不同的行。

謝謝!

+0

不同? – 2013-04-29 20:03:15

+0

使用計數,然後做計數> 1時 – Andrew 2013-04-29 20:03:19

回答

4

一個JOIN的解決方案是:從

什麼
SELECT DISTINCT a.* 
FROM table a 
JOIN table b 
    ON a.colA = b.colA 
    AND a.colB != b.colB 
+1

我喜歡這個解決方案! – 2013-04-29 20:13:27

+0

如果colB的值超過兩個,將會添加重複項。 – 2013-04-29 20:25:23

+0

@AlvinThompson:啊,'DISTINCT'的晦澀含義... – Wrikken 2013-04-29 20:28:08

1

你可以做

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

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

,但你的問題是有些不清楚,所以我不知道這是你在問什麼,還是不行。

1

要與乘數b計價得到該列的值,可以使用group byhaving條款:

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()比較通常會表現得更好。

+1

在您的查詢中,您已按ColB分組,因此「MIN(ColB)」總是等於MAX(ColB)嗎? – GarethD 2013-04-29 20:09:02

3

根據您的示例輸出,它看起來像只包含colA的值(如果它們具有多個),但不同的值爲colB。你可以是這樣做的:

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

是的,這是我正在尋找的措辭。這是完全正確的。我會盡快解決。謝謝!!! – 2013-04-29 20:10:07

+0

很高興工作!我可以理解這是多麼難;我自己有很多麻煩:) – 2013-04-29 20:11:03

+0

但是這不會給@ChristopherBales尋找的輸出。它代替了他的計數。 – 2013-04-29 20:20:26

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