我工作用表有两列是相同的键,行包含重复的值,但在不同的列去除重复行:SQL二进制关系
A1 | A2
---+---
b | c
c | b
有减少这种办法只有一行?
编辑:很抱歉的不确定性。我希望输出是b | c或c | b。 如果我有更像值的表:
b|c
c|b
d|e
e|d
我想要的东西,如:
b|c
d|e
我工作用表有两列是相同的键,行包含重复的值,但在不同的列去除重复行:SQL二进制关系
A1 | A2
---+---
b | c
c | b
有减少这种办法只有一行?
编辑:很抱歉的不确定性。我希望输出是b | c或c | b。 如果我有更像值的表:
b|c
c|b
d|e
e|d
我想要的东西,如:
b|c
d|e
select distinct A1 from Table1
union
select distinct A2 from Table1
这不是两行吗?这个问题不是很清楚,但他确实表示他不会将其降为一行。 –
-1:对不起,错过了这一点。 –
我通过中介表做到这一点。这里是我会做什么:
SELECT DISTINCT
CASE WHEN A1 >= A2 THEN A1 ELSE A2 END A1
,CASE WHEN A1 >= A2 THEN A2 ELSE A1 END A2
INTO
T2
FROM
T1
DROP TABLE T1
SELECT * INTO T1 FROM T2
DROP TABLE T2
使用PostgreSQL,Oracle或MySQL,您可以用最少和最大替换CASE表达式。 –
该标签只表示SQL,但是对于将来还是值得注意的。 – briantyler
不需要中间表。 –
假设这些值可以正确排序:
SELECT DISTINCT least(a1), greatest(a2)
FROM table1
如果A1和A2不能正确排序的值,这虽然不会工作。
SELECT A1, A2
FROM YourTable
WHERE A1 < A2
UNION
SELECT A2 AS A1, A1 AS A2
FROM YourTable
WHERE A1 > A2;
一旦您修复了数据,请添加一个约束,例如
CHECK (A1 < A2);
你的问题还不清楚。你可以请举一些例子输出去与你的例子输入? – 2011-10-18 15:29:13
你想检测这些“重复”,所以你可以删除它们,或者因为b/c已经过去了,所以排除了c/b组合? –
这取决于......“A1”和“A2”是什么意思? –