SQL nulls bij joins

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Wim Poort

Wim Poort

08/09/2015 16:58:59
Quote Anchor link
Hallo, ik ben nieuw hier. Ik heb een vraag over joins en het vertalen van nulls.

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
 
PHP hulp

PHP hulp

04/02/2023 17:14:11
 
Ward van der Put
Moderator

Ward van der Put

08/09/2015 18:16:06
Quote Anchor link
>> Maar als er geen match is, dus A.KLANT gaat null worden. Dan moet dit 00000 worden.

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.
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

08/09/2015 19:02:31
Quote Anchor link
Waarschijnlijk zoek je een full join, alleen MySQL heeft dat niet, dus moet je dat simuleren:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
SELECT
    COALESCE(B.KLANT, '00000') klantnr
FROM
    A
LEFT JOIN
    B
    ON A.ORDER = B.ORDER

UNION /* [DISTINCT] */

SELECT
    COALESCE(A.KLANT, '99999')
FROM
    B
LEFT JOIN
    A
    ON A.ORDER = B.ORDER
 
Thomas van den Heuvel

Thomas van den Heuvel

08/09/2015 21:18:18
Quote Anchor link
Hoe verschillen tabel A en B van elkaar?

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).
 
Jan de Laet

Jan de Laet

09/09/2015 11:18:26
Quote Anchor link
Wat is het verschil tussen de als en de maar in jouw tabellen: "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".
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
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.