Temat: [Oracle-SQL] Na pierwszy rzut oka trywialny problem..
Witam,
Testowałem odpowiedź dla:
CREATE TABLE table_name(
A1 Varchar2(32),
A2 Number,
A3 Number,
A4 Number,
B1 Varchar2(32),
B2 Number,
B3 Number,
B4 Number
);
Insert into table_name values('Polska', 1000, 250, 10, 'Francja', 1030, 300, 30);
Insert into table_name values ('Francja', 1030, 300, 30, 'Polska', 1000, 250, 10);
Insert into table_name values ('Włochy', 1030, 300, 30, 'Polska', 1000, 250, 10);
Insert into table_name values ('Polska', 1000, 250, 10, 'Włochy', 1030, 300, 30);
Insert into table_name values ('Niemcy', 1021, 250, 10, 'Rosja', 1045, 300, 30);
Insert into table_name values ('Rosja', 1045, 300, 30, 'Niemcy', 1021, 250, 10);
Select wyświetlający tylko jeden z podwójnych wierszy:
SELECT *
FROM table_name tn
WHERE ROWID IN (SELECT MIN(t1.ROWID)
FROM table_name t1, table_name t2
WHERE (t1.A1=t2.B1 and t1.A2=t2.B2 and t1.A3=t2.B3 and t1.A4=t2.B4)
and ((t1.A1=tn.A1 and t1.A2=tn.A2 and t1.A3=tn.A3 and t1.A4=tn.A4 and t1.B1=tn.B1 and t1.B2=tn.B2 and t1.B3=tn.B3 and t1.B4=tn.B4) or (t1.A1=tn.B1 and t1.A2=tn.B2 and t1.A3=tn.B3 and t1.A4=tn.B4 and t1.B1=tn.A1 and t1.B2=tn.A2 and t1.B3=tn.A3 and t1.B4=tn.A4)));
Nie wyświetla jednak pojedynczych wierszy czyli np:
Insert into table_name values ('Anglia', 1045, 350, 30, 'Hiszpania', 1021, 550, 10);
EDIT:
Natomiast pojedyncze wyświetli prosta modyfikacja powyższego:
SELECT *
FROM table_name tn
WHERE ROWID NOT IN (SELECT t1.ROWID
FROM table_name t1, table_name t2
WHERE (t1.A1=t2.B1 and t1.A2=t2.B2 and t1.A3=t2.B3 and t1.A4=t2.B4)
and ((t1.A1=tn.A1 and t1.A2=tn.A2 and t1.A3=tn.A3 and t1.A4=tn.A4 and t1.B1=tn.B1 and t1.B2=tn.B2 and t1.B3=tn.B3 and t1.B4=tn.B4) or (t1.A1=tn.B1 and t1.A2=tn.B2 and t1.A3=tn.B3 and t1.A4=tn.B4 and t1.B1=tn.A1 and t1.B2=tn.A2 and t1.B3=tn.A3 and t1.B4=tn.A4)));
Złączając oba selecty przy pomocy UNION otrzymamy komplet.
Łukasz Bednarek edytował(a) ten post dnia 17.03.09 o godzinie 20:14