2013-02-08 36 views
1

我有一個像這樣的表有ab兩個屬性。現在,有很多數據都經過了這些東西,我想選擇所有記錄,其中a的一個值具有多於1個不同值b從MySQL選擇非冗餘數據?

例如,從下面的示例表

a b 
--------- 
    1 1 
    1 1 
    2 1 
    2 2 
    3 1 
    4 1 
    4 5 
    4 1 

我想選擇

a b 
-------- 
    2 1 
    2 2 
    4 1 
    4 5 

或者,如果沒有其他可能只是24(兩個結果行),所以我可以在第二個查詢中獲得更具體的數據。

我已經嘗試使用GROUP BYHAVING以及一些帶有子查詢的結構,但沒有任何結果與我想要的結果接近。我真的不想通過手動獲取所有數據和緊縮。

這可能是一件非常簡單的事情,但我無法做到,所以如何解決這個問題?

+0

@JW。因爲它們是'a = 1'和'a = 3'唯一的組合。 – 2013-02-08 17:10:48

回答

3

對於單個表的訪問(即返回b所有值的a在同一行上的特定值),嘗試:

select a, group_concat(distinct b) 
from yourtable 
group by a 
having count(distinct b) > 1 

要a和b每一個組合返回不同的行,嘗試:

select distinct yt1.a, yt1.b 
from yourtable yt1 
join yourtable yt2 on yt1.a = yt2.a and yt1.b <> yt2.b 

Exists變種:

select distinct a, b 
from yourtable yt1 
where exists 
(select 1 
from yourtable yt2 
where yt1.a = yt2.a and yt1.b <> yt2.b) 
+1

謝謝!因爲我在生產環境中有更多列,所以使用了附加的「GROUP BY b」的第二個變體。 ;) – 2013-02-08 17:23:10