以下に、挿入されたデータとともにテーブルを作成するためのSQLコードがあります
CREATE TABLE TEST (A varchar(4), B varchar(4));
INSERT INTO TEST (ID,A,B) VALUES ('1','d','a');
INSERT INTO TEST (ID,A,B) VALUES ('1','c','a');
INSERT INTO TEST (ID,A,B) VALUES ('1','b','a');
INSERT INTO TEST (ID,A,B) VALUES ('1','a','xxx');
INSERT INTO TEST (ID,A,B) VALUES ('1','a','d');
INSERT INTO TEST (ID,A,B) VALUES ('1','a','c');
INSERT INTO TEST (ID,A,B) VALUES ('1','a','b');
INSERT INTO TEST (ID,A,B) VALUES ('2','g','a');
INSERT INTO TEST (ID,A,B) VALUES ('2','a','g');
INSERT INTO TEST (ID,A,B) VALUES ('3','f','b');
INSERT INTO TEST (ID,A,B) VALUES ('3','b','f');
INSERT INTO TEST (ID,A,B) VALUES ('4','s','r');
INSERT INTO TEST (ID,A,B) VALUES ('4','r','s');
INSERT INTO TEST (ID,A,B) VALUES ('5','r','t');
INSERT INTO TEST (ID,A,B) VALUES ('7','h','g');
前に説明したように、次のクエリを使用します。
select distinct tab1.ID,
( case when tab1.A < tab1.B then tab1.A else tab1.B end ) as A,
( case when tab1.A > tab1.B then tab1.A else tab1.B end) as B
from TEST tab1, TEST tab2
...私は望ましい結果を得ました:
ID A B
-- -- --
1 a b
1 a c
1 a d
1 a xxx
2 a g
3 b f
4 r s
5 r t
7 g h
申し訳ありませんが、ここで何かを見逃しているかもしれませんが、あなたのソリューションはまだ意図したとおりに機能していないようです。
@fthiella: 私はあなたのソリューションをテストしました:
SELECT tab1.*
FROM TEST tab1 LEFT JOIN TEST tab2 on tab1.B=tab2.A
WHERE tab1.A<tab1.B OR tab2.A is null
結果 (a/b
重複、g/h
欠落):
ID A B
-- -- --
1 a b
1 a b
1 a c
1 a xxx
2 a g
3 b f
4 r s
5 r t
@wildplasser: このソリューションも機能しないようです
SELECT * FROM TEST t
WHERE EXISTS (
SELECT * FROM TEST x
WHERE x.a = t.b AND x.b = t.a
AND x.a > x.b -- tie breaker
);
結果(a/xxx
およびr/t
欠落しています):
ID A B
-- -- --
1 a b
1 a c
1 a d
2 a g
3 b f
4 r s