كيفية إزالة صفوف معاكسة من جدول SQL
سؤال
لدي جدول SQL التالي:
A|B
---
w|x
x|w
y|z
z|y
هل يمكنني بناء استعلام سيؤدي إلى النتيجة التالية:
A|B
---
w|x
y|z
لتلخيص ، أود التعامل مع العمودين كمجموعة غير مرتبة ، بحيث (a ، b) == (b ، a).
المحلول
ال "أفضل" يعتمد الرمز على قاعدة البيانات ، ولكن فيما يلي DBMS-Agnostic:
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
.
لا تنتمي إلى StackOverflow