webForumDet fria alternativet

Slå ihop adresser

Databaser & SQL

3 svar · 569 visningar · startad av Jesper T

Medlem sedan nov. 20017 144 inlägg
Frågan#1

Jag har två tabeller Person och Person_relation

I tabellen Person har jag Namn, postadress, ort osv.

I tabellen Person_relation kopplar jag ihop en person med en annan person.

Nu vill jag göra en "rapport" som spottar ut alla personers adresser men då endast en rad per unik adress. Det går självklart inte att helt sonika gruppera adresserna då två personer kan ha samma postadress som inte har någon koppling till varandra.

Däremot så är risken minimal om jag kollar huruvida de har en koppling i tabellen Person_relation när jag grupperar dem.

Hur skulle en sådan sql se ut?

[B]Person[/B]
id | namn   | postadress   | ort
-----------------------------------
1  | Kalle  | Storgatan 18 | Särna
2  | Åsa    | Vasagatan 2b | Sala
3  | Britta | Åsgatan 3    | Järla
4  | Berit  | Storgatan 18 | Särna

[B]Person_relation[/B]
p1_id | p2_id
---------------
1     |  4

Resultat (Då Berit och Kalle har en relation och har samma adress)
Kalle, Storgatan 18, Särna
Åsa, Vasagatan 2b, Sala
Britta, Åsgatan 3, Järla

Medlem sedan dec. 200012 464 inlägg
#2
select namn,
       postadress,
       ort
  from person
 where not exists
    (select *
       from person_relation
  where person.id = person_relation.p2_id)
Medlem sedan mars 2004485 inlägg
#3

LarsG skrev:

select namn,
       postadress,
       ort
  from person
 where not exists
    (select *
       from person_relation
  where person.id = person_relation.p2_id)

Det där förutsätter ju att alla personer som är i relationer har samma adress, den ena adressen tas bort för alla som är i en relation.

Medlem sedan juli 200012 978 inlägg
#4

>aron Det var ju så TS skrev i sitt exempel!
Återigen har LarsG levererat en härlig lösning :birp :birp :birp :birp

265 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
131 ms — deklarationer (db)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)
130 ms — ändringar (db)