[SQL] Join op meerdere indexen met lege velden

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Da Weef
  • Registratie: Januari 2004
  • Laatst online: 15-09 09:16
Waarschijnlijk is dit een beetje simpele vraag, maar dat maakt hem hopelijk des te makkelijker te beantwoorden ;)

Ik wil twee tabellen in een database joinen (in Access) op basis van 3 gekoppelde indexen (om precies te zijn postcode, huisnummer, toevoeging). Hierbij heeft vooral het veld 'toevoeging' veel lege velden. Deze records gaan verloren bij de join.

Uiteraard kan ik alle lege velden vervangen door een waarde 'leeg' of iets dergelijks, echter prefereer ik toch sterk een oplossing waarbij de lege velden gewoon blijven bestaan. Bovendien ben ik ervan overtuigd dat er een simpele oplossing moet zijn hiervoor.

Alvast bedankt!

.


Acties:
  • 0 Henk 'm!

  • GX
  • Registratie: Augustus 2000
  • Laatst online: 14-05 09:40

GX

Nee.

Ik snap niet wat je bedoelt; als je joint op een veld dat leeg is; moet het overeenkomende record ook een leeg veld hebben. Als dat niet is wat je wilt, moet je anders joinen; met een outer join bijvoorbeeld.

Acties:
  • 0 Henk 'm!

  • Da Weef
  • Registratie: Januari 2004
  • Laatst online: 15-09 09:16
Als ik nu join vervallen de records waarbij postcode en huisnummer gelijk zijn, maar een toevoeging ontbreekt. Kortom, als er geen toevoeging is (wat redelijk vaak het geval is bij adressen) wordt de record nooit meegenomen in de join.

.


Acties:
  • 0 Henk 'm!

  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-03-2024

Confusion

Fallen from grace

left join?

Wie trösten wir uns, die Mörder aller Mörder?


Acties:
  • 0 Henk 'm!

  • Motrax
  • Registratie: Februari 2004
  • Niet online

Motrax

Profileert

☻/
/▌
/ \ Analyseert | Modelleert | Valideert | Solliciteert | Generaliseert | Procrastineert | Epibreert |


Acties:
  • 0 Henk 'm!

  • Dido
  • Registratie: Maart 2002
  • Laatst online: 19:48

Dido

heforshe

full outer join lijkt me logischer dan een left of right outer join, dan. :)

Maar volgens mij ligt de oplossing niet bij een outer join. Het gaat niet over ontbrekende records maar om het feit dat NULL = NULL gewoon een FALSE oplevert.

Iets als joinen op coalesce(a.key, 0) = coalesce (b.key, 0) wellicht?

[ Voor 36% gewijzigd door Dido op 01-12-2008 11:43 ]

Wat betekent mijn avatar?


Acties:
  • 0 Henk 'm!

  • Da Weef
  • Registratie: Januari 2004
  • Laatst online: 15-09 09:16
Left join is niet wat ik wil, ik wil alleen de records die matchen eruit halen.

Ik heb nu wel een lompe oplossing gevonden door te joinen op:


code:
1
db1.toevoeging = db2.toevoeging OR (db1.toevoeging=null AND db2.toevoeging=null)


Uber-lelijk, maar het werkt...


EDIT: Wat Dido zegt klopt als een bus, het gaat inderdaad om null=null levert false op

[ Voor 14% gewijzigd door Da Weef op 01-12-2008 11:49 ]

.


Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Da Weef schreef op maandag 01 december 2008 @ 11:16:
Ik wil twee tabellen in een database joinen (in Access) op basis van 3 gekoppelde indexen (om precies te zijn postcode, huisnummer, toevoeging). Hierbij heeft vooral het veld 'toevoeging' veel lege velden. Deze records gaan verloren bij de join.
Waarom heb je niet gewoon een ID waarop je kan joinen? Volgens mij is er iets misgegaan met het design.
Uiteraard kan ik alle lege velden vervangen door een waarde 'leeg' of iets dergelijks, echter prefereer ik toch sterk een oplossing waarbij de lege velden gewoon blijven bestaan. Bovendien ben ik ervan overtuigd dat er een simpele oplossing moet zijn hiervoor.
Je kan in de Acces-SQL de functie nz(..) gebruiken aan beide kanten van de on-clause.

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

  • Da Weef
  • Registratie: Januari 2004
  • Laatst online: 15-09 09:16
Waarom heb je niet gewoon een ID waarop je kan joinen? Volgens mij is er iets misgegaan met het design.
Ik heb de databases extern aangeleverd gekregen, waarbij ze wel elk een uniek ID hebben, maar dat matcht niet :S

.


Acties:
  • 0 Henk 'm!

  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-03-2024

Confusion

Fallen from grace

Dido schreef op maandag 01 december 2008 @ 11:41:
Maar volgens mij ligt de oplossing niet bij een outer join. Het gaat niet over ontbrekende records maar om het feit dat NULL = NULL gewoon een FALSE oplevert.

Iets als joinen op coalesce(a.key, 0) = coalesce (b.key, 0) wellicht?
Inderdaad, ook ik was te snel met reageren. Ik ben het probleem nog nooit tegengekomen, maar ik denk dat deze oplossing inderdaad goed werkt.

Wie trösten wir uns, die Mörder aller Mörder?


Acties:
  • 0 Henk 'm!

  • Motrax
  • Registratie: Februari 2004
  • Niet online

Motrax

Profileert

Ik gebruik een nvl(tabel1.waarde1, null, 1) = nvl(tabel2.waarde2, null, 1). Verstandig is om '1' nog wel te vervangen door iets ingewikkelders, iets als '%$^#&'.

Of je update je velden van een null naar een combinatie die niet zo gauw bestaat. %$^#& beat that :+

Ik heb coalesce() zelf nooit gebruikt, maar uit de beschrijving maak ik op dat het niet echt gaat werken.

☻/
/▌
/ \ Analyseert | Modelleert | Valideert | Solliciteert | Generaliseert | Procrastineert | Epibreert |


Acties:
  • 0 Henk 'm!

  • Da Weef
  • Registratie: Januari 2004
  • Laatst online: 15-09 09:16
Access kent geen coalesce(), dus ik gebruik mijn hakketakke oplossing wel. Die doet precies hetzelfde toch?

.


Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Da Weef schreef op maandag 01 december 2008 @ 12:03:
Access kent geen coalesce(), dus ik gebruik mijn hakketakke oplossing wel. Die doet precies hetzelfde toch?
Misschien zelfs nog wel sneller. :) Maar je kan dus in Access ook Nz() gebruiken om typwerk te besparen, of in MySQL/T-SQL ISNULL().

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten

Pagina: 1