سؤال

لدي جدول 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.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top