Probleem met INNER JOIN en results
Veil
11/12/2008 16:04:00Ik loop tegen het probleem aan dat ik bij het selecteren van gegevens uit meerdere tabellen geen result krijg wanneer geen match kan worden gevonden tussen twee tabellen, omdat bijvoorbeeld een entry niet gevonden kan worden in één van de tabellen.
Bijvoorbeeld:
SELECT blabla FROM foo INNER JOIN bar ON foo.something=bar.somethingelse
Nu kan ik dit oplossen door een UNION, bijvoorbeeld:
SELECT blabla FROM foo WHERE something IS NULL
UNION
SELECT blabla FROM foo INNER JOIN bar ON foo.something IS NOT NULL AND foo.something=bar.somethingelse
Maar stel nu dat foo.something wel bestaat.. alleen mist de entry bar.somethingelse? Dan krijg ik geen result in dat geval en biedt de UNION ook geen uitkomst.
Ik zou dit graag op willen lossen in één query. Bij afzonderlijke queries is het verschil is tijdsduur veel te groot (10sec vs 30ms ofzo) omdat het om erg grote tabellen gaat en op de variabele van de vergelijking foo.something=bar.somethingelse al een index staat. Ook liever niet versnellen door extra indices als het gewoon met een normale query kan.
Wie weet raad?
Bijvoorbeeld:
SELECT blabla FROM foo INNER JOIN bar ON foo.something=bar.somethingelse
Nu kan ik dit oplossen door een UNION, bijvoorbeeld:
SELECT blabla FROM foo WHERE something IS NULL
UNION
SELECT blabla FROM foo INNER JOIN bar ON foo.something IS NOT NULL AND foo.something=bar.somethingelse
Maar stel nu dat foo.something wel bestaat.. alleen mist de entry bar.somethingelse? Dan krijg ik geen result in dat geval en biedt de UNION ook geen uitkomst.
Ik zou dit graag op willen lossen in één query. Bij afzonderlijke queries is het verschil is tijdsduur veel te groot (10sec vs 30ms ofzo) omdat het om erg grote tabellen gaat en op de variabele van de vergelijking foo.something=bar.somethingelse al een index staat. Ook liever niet versnellen door extra indices als het gewoon met een normale query kan.
Wie weet raad?
Gewijzigd op 01/01/1970 01:00:00 door Veil
PHP hulp
22/11/2024 11:03:42Frank -
11/12/2008 16:07:00Dan heb je dus geen INNER JOIN nodig, maar een LEFT of RIGHT JOIN. UNION heeft er niks mee te maken, die hoort hier niet in thuis.
Zonder datamodel kunnen we verder weinig doen.
Zonder datamodel kunnen we verder weinig doen.
Quote:
Om hoeveel miljoen records of hoeveel GB gaat het dan?omdat het om erg grote tabellen gaat
Veil
11/12/2008 16:53:00Ah, thanks! Het werkt nu met LEFT JOIN. Had er al eerder mee gespeeld maar schijnbaar niet goed op de syntax gelet :)
Het gaat om 2 tot 3 miljoen records in beide tabellen. Het komt nu iig niet meer boven de 300ms uit ofzo, dus dat is prima.
Het gaat om 2 tot 3 miljoen records in beide tabellen. Het komt nu iig niet meer boven de 300ms uit ofzo, dus dat is prima.
Frank -
11/12/2008 16:57:00Kortom, het gaat maar om een paar records. En dat gaat met de juiste query ook uitstekend, blijkt wel weer.
Mooi dat het is opgelost.
Mooi dat het is opgelost.