2015-05-29 106 views
-1

我有數據在具有重複行的表,但以不同的順序(row1.column1.value = row2.column2.value反之亦然)例如:如何獲取A-B數據但不包含B-A?

1 A B 
2 B A 
3 B C 
4 C B  
5 A C 
6 C A 
... 

從該表我想得到是唯一的數據(這意味着有是具有這2個值加在一起沒有其他行)像這樣:

1 A B 
3 B C 
6 C A 
... 

任何人可以幫助我嗎?提前致謝!

+1

是''A' B'在單個列不同的列或值的值? – ughai

+0

不同列 –

+1

你可以編輯你的問題並添加預期的輸出,它仍然不清楚你想要什麼? –

回答

-1
SELECT 
* 
FROM 
    table 
WHERE 
(col1, col2) IN (
    SELECT DISTINCT 
     (
      CASE 
      WHEN STRCMP(col1, col2) < 0 THEN 
       col1 
      ELSE 
       col2 
      END 
     ) AS col1, 
     (
      CASE 
      WHEN STRCMP(col1, col2) < 0 THEN 
       col2 
      ELSE 
       col1 
      END 
     ) AS col2 
    FROM 
     table 
); 
+0

這看起來像一個*真*精心製作的方式來說'SELECT * FROM表where col1

+0

如果A-C組合不存在,這不會返回C-A,因此我認爲這不是一個完整的答案 –

1

您可以使用CASE來獲取不同的組合並獲取相應的最小ID並僅提取這些記錄。

像這樣

SELECT T1.* 
FROM table1 T1 
INNER JOIN 
(
SELECT MIN(ID) as ID, CASE WHEN Col1 > Col2 THEN CONCAT(Col1 ,Col2) ELSE CONCAT(Col2,Col1) END GRP 
FROM table1 
GROUP BY CASE WHEN Col1 > Col2 THEN CONCAT(Col1,Col2) ELSE CONCAT(Col2, Col1) END 
) T2 
ON T1.ID = T2.ID; 

SQL Fiddle