2012-09-24 34 views
2

我有一個表t與價值觀如何獲得2列的所有不同組合在MySQL

+------+------+------+ 
| col1 | col2 | col3 | 
+------+------+------+ 
| 1 | 2 | x | 
| 1 | 3 | x | 
| 1 | 4 | x | 
| 2 | 1 | x | 
| 2 | 3 | x | 
| 2 | 4 | x | 
+------+------+------+ 

我需要這樣的結果:

+------+------+------+ 
| col1 | col2 | col3 | 
+------+------+------+ 
| 1 | 2 | x | 
| 1 | 3 | x | 
| 1 | 4 | x | 
| 2 | 3 | x | 
| 2 | 4 | x | 
+------+------+------+ 

注(1,2)是一樣的(2,1)

+0

天哪......你「編輯」的傢伙會變得瘋狂。你編輯帖子並添加一些「ASCII藝術」。把ASCII花放進去怎麼樣?對不起,OT順便說一句。 – WojtusJ

+0

@WojtusJ你能解釋一下你添加的表格邊界有什麼問題嗎?它會打擾你嗎? – kapa

+0

@bažmegakapa,不,它沒有,我只是說在我看來這是可笑的 - 以前的版本已經是可讀的,這個地方不是可愛的設計,但良好的技術解決方案。 – WojtusJ

回答

2

爲了使用DISTINCT子句,需要手動對前兩列進行排序:

SELECT DISTINCT 
    CASE WHEN (col1 < col2) THEN col1 else col2 END AS Col1, 
    CASE WHEN (col1 < col2) THEN col2 else col1 END AS Col2, 
    col3 
FROM t 

See this SQLFiddle

+0

如果'col3'包含不同的值,它將無法正常工作。 –

+0

您也鬆散了哪些值原來在哪個列中的信息... – WojtusJ

+0

Grisha:它不是由提問者真正定義的,在這種情況下應該發生什麼。 WojtusJ:沒錯。如果知道原始字段很重要,解決方案將無法工作。 – Mark

相關問題