SQL nulls bij joins
Ik heb een SQL statement die relatief gezien eenvoudig is. Maar ik krijg het niet goed voor elkaar.
Het gaat erom dat ik op zoek ben naar een SQL statement volgens deze informatie.
De klant is gebaseerd op een match tussen conracten van tabel A en tabel B. Als er een match is, dan wordt de klant uit tabel A gepakt. Als er geen contract is in tabel B, dan wordt het 00000. Maar als de klant in A geen contract heeft, dan moet het 99999 worden.
SELECT
A.KLANT
FROM TABEL A
LEFT OUTER JOIN TABEL B
ON A.ORDER = B.ORDER
Dat is een normale left outer join statement.
Maar als er geen match is, dus A.KLANT gaat null worden. Dan moet dit 00000 worden.
Los ik zo op
SELECT
COALESCE(A.KLANT, '00000') AS KLANT
FROM TABEL A
LEFT OUTER JOIN TABEL B
ON A.ORDER = B.ORDER
Maar als deze klant in tabel A geen contract heeft, dan moet het 99999 worden.
Hoe los ik zoiets op?
Wim
Je maakt er dan klantnummer 00000 van, maar je wilt juist de speciale status van NULL uitbuiten: NULL duidt op een klant zonder orders of een order zonder klant. Je mist een WHERE met IS NULL of IS NOT NULL.
Als deze praktisch hetzelfde zijn kun je mogelijk beter een property contracttype introduceren en de tabellen samenvoegen.
Als deze heel erg verschillen ben je toch een beetje appels met peren aan het vergelijken.
Bovenstaande oplossingen borduren mogelijk voort op een verkeerde oplossing (database-opzet).
Wat is geen contract? Geen record of een veld met contract niet gevuld?
Gewijzigd op 09/09/2015 13:53:40 door Jan de Laet