
Zitat von
MarioMan
Hallo,
hier mal ein Beispiel einer Tabelle als Basis um mein Problem darzustellen.
zB. eine Person-Table mit id, firstname und lastname jeweils als Spalte. In Wirklichkeit ist das ganze natürlich wesentlich komplexer. Aber fürs Beispiel reicht das mal.
Einfache doppelte Einträge herausfinden ist kein Thema. Meine Problematik geht dahin, dass firstname und lastname auch vertauscht werden können. Dh. eine Zeile mit firstname = 'Hugo', lastname = 'Boss' und eine weitere Zeile mit firstname = 'Boss', lastname = 'Hugo' sollte als doppelter Eintrag erkannt werden und beide Ids sollen ausgegeben werden. Wenn möglich noch in einer Zeile.
Code:
test=# select * from p;
id | firstname | lastname
----+-----------+------------
1 | hugo | boss
2 | boss | hugo
3 | andreas | kretschmer
4 | vorname | nachname
5 | nachname | vorname
(5 rows)
test=# select case when firstname > lastname then firstname||lastname else lastname||firstname end, array_agg(id) from p where (case when firstname > lastname then firstname||lastname else lastname||firstname end) in (select case when firstname > lastname then firstname||lastname else lastname||firstname end from p group by 1 having count(*) > 1) group by 1;
case | array_agg
-----------------+-----------
hugoboss | {1,2}
vornamenachname | {4,5}
(2 rows) So?
Andreas
Lesezeichen