我有以下SQL表:如何從SQL表中刪除對面行
A|B
---
w|x
x|w
y|z
z|y
我可以構造一個查詢,這將產生以下結果:
A|B
---
w|x
y|z
總之,我想將兩列視爲無序集合,使(a,b)==(b,a)。
我有以下SQL表:如何從SQL表中刪除對面行
A|B
---
w|x
x|w
y|z
z|y
我可以構造一個查詢,這將產生以下結果:
A|B
---
w|x
y|z
總之,我想將兩列視爲無序集合,使(a,b)==(b,a)。
的「最佳」代碼取決於數據庫,但以下是DBMS無關:
SELECT t.A,
t.B
FROM my_table t
LEFT JOIN my_table t2
ON t.A = t2.B
AND t.B = t2.A
AND t.A < t.B
WHERE t2.A IS NULL
你可以嘗試以下方法:
SELECT LEAST(a,b) a, GREATEST(a,b) b
FROM t
GROUP BY LEAST(a,b), GREATEST(a,b)
用下面的測試表t
:
CREATE TABLE t (a VARCHAR(1), b VARCHAR(1));
INSERT INTO t VALUES ('w','x'),('x','w'),('y','z'),('z','y');
返回:
w x
y z
使用LEAST
和GREATEST
還確保返回w x
而不是x w
。
+1:我正要編輯我的答案並添加這個答案:)儘管使用't.A> t.B'來獲得指定的結果('w | x'而不是'x | w')。 – 2010-02-28 08:34:00
該死的。我非常接近這一點,所以我排除了訂購比較,所以我的結果總是零。 – CJH 2010-02-28 08:36:01
我會說'w
2010-02-28 08:36:43