2011-11-18 86 views
2

我下表MySQL的:翻過兩行選擇不同的組合,不重複計算

dc rc 
---------- 
    AE GB 
    DE US 
    CN DE 
    DE TT 
    US DE 
    GB AE 

我想選擇所有獨特的DC,RC組合,但不考慮順序的都有。特別是,MySQL select應該返回

dc rc 
---------- 
    AE GB 
    DE US 
    CN DE 
    DE TT 

即它不應該重複計算AE-GB和DE-US。我發現了一些類似的問題,例如當數據庫是總是顯示兩次的關係之一時(例如在Filter SQL query by a unique set of column values, regardless of their order上)。但是,這不是這種情況,因爲不能保證條目出現兩次(在大多數情況下它不會)。

顯然,

SELECT DISTINCT dc, rc FROM table GROUP BY dc, rc 

不會做的伎倆。

我感謝所有幫助

回答

4

嘗試:

(編輯,包括附加列)

select dc, rc, min(other_column1), sum(other_column2) /*etc as required*/ 
from 
(select dc, rc, other_column1, other_column2 from table where rc >= dc 
union all 
select rc, dc, other_column1, other_column2 from table where rc < dc) v 
group by dc, rc 
+0

+1有趣的解決方案 – Devart

+0

對不起,但這並不工作。它給我完全一樣,當我運行「SELECT distinct dc,rc FROM table」 但是也許集合操作是要走的路。 我認爲它可以通過在SQL語句中使用NOT EXISTS或EXISTS之類的東西來解決。 這將只允許選擇不同的rc,dc,但如果已經選擇了特定的rc,dc組合,則不會。 但我似乎無法管理這個... 有什麼建議嗎? – devmag

+0

@ user1053779,您是否使用您在示例中提供的數據集?當我這樣做時,我會得到你想要的輸出數據集。 –

0

SQL服務器是我的事,所以你可能需要翻譯,但這應該做它

Select Distinct dc, rc 
From 
(Select dc,rc From SomeTable 
    Union 
    Select rc,dc From SomeTable 
) BothWays 

聯盟有效地做一個獨特的,所以它應該工作。

+0

它沒有工作,結果並不如預期。 – Devart

+0

是的,它以某種方式不起作用。我猜想關鍵是「雙向」,這可能在MySQL中不可用。 我已經想過爲每個連接字符串的組合創建一個字段,然後按字母順序排序字符串。這可能會給我一些相同的東西 美國 - DE DE - 美國 因此,我可以做一個明確的這個「新標識符」。然而,這個標識符可能並不是唯一的。但是必須有一種方法可以通過巧妙的查詢來實現。 – devmag

+0

@devmag:BothWays是一個表別名。 –

1

這裏有一個替代方案,應該提供相同的答案馬克的:

SELECT A.DC, A.RC 
FROM tab A 
LEFT JOIN tab B 
ON A.DC = B.RC 
AND A.RC = B.DC 
AND A.DC >= B.DC 
WHERE B.RC IS NULL