2016-03-02 63 views
0

我有一個簡單的表2列:SQL選擇不同的,但詳盡列

Col1 | Col2 
-----+----- 
1 | 3 
1 | 4 
2 | 3 
2 | 4 
... many more rows 

我想回到這個:

Col1 | Col2 
-----+----- 
1 | 3 
2 | 4 

我不希望這樣的:

Col1 | Col2 
-----+----- 
1 | 3 
2 | 3 

因爲3在Col2中被複制,所以這也不是

Col1 | Col2 
-----+----- 
1 | 3 
1 | 4 

因爲1在Col1中複製,也不是這

Col1 | Col2 
-----+---- 
1 | 3 

因爲現在4在col2的缺失。換句話說,我不想重複,但我也不想省略col2中的任何值(除非它在Col1中出現重複 - 反之亦然)。我如何使用SQL來做我想做的事?謝謝。

+1

請看看這個:http://stackoverflow.com/questions/12188027/mysql-select-distinct-multiple-columns –

+0

謝謝,但沒有這些解決方案的工作。 –

+2

當'col1'具有'1,1,2'和'col2'具有'3,4,5'時應該發生什麼? –

回答

0

其按你給定的樣本數據的工作

select col1, 
case 
when col1 =1 and col2 in (3,4) Then 3 
when col1 =2 and col2 in (3,4) Then 4 
end as col2 
from table1 
group by col1 

更多的細節去這裏sql fiddle

0

我認爲你需要這樣的查詢:

SELECT Col1, Col2 
FROM 
    (SELECT dt.*, @rownum1 := @rownum1 + 1 AS rn 
    FROM 
     (SELECT Col1 
     FROM t 
     GROUP BY Col1) dt, 
     (SELECT @rownum1 := 0) r) t1 
    LEFT OUTER JOIN 
    (SELECT dt.*, @rownum2 := @rownum2 + 1 AS rn 
    FROM 
     (SELECT Col2 
     FROM t 
     GROUP BY Col2) dt, 
     (SELECT @rownum2 := 0) r) t2 
    ON t1.rn = t2.rn 
UNION ALL 
SELECT Col1, Col2 
FROM 
    (SELECT dt.*, @rownum3 := @rownum3 + 1 AS rn 
    FROM 
     (SELECT Col2 
     FROM t 
     GROUP BY Col2) dt, 
     (SELECT @rownum3 := 0) r) t1 
    LEFT OUTER JOIN 
    (SELECT dt.*, @rownum4 := @rownum4 + 1 AS rn 
    FROM 
     (SELECT Col1 
     FROM t 
     GROUP BY Col1) dt, 
     (SELECT @rownum4 := 0) r) t2 
WHERE (t2.Col1 IS NULL); 
  1. 你需要不同具有行號的值爲Col1
  2. 您還需要使用行號的不同值Col2
  3. 現在您可以通過使用UNION ALL來設置FULL OUTER JOIN這些不同的值ON行號。

[SQL Fiddle Demo]