2015-05-29 76 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