[MySQL] JOIN's (ik vraag het toch)

Pagina: 1
Acties:
  • 37 views sinds 30-01-2008

  • Skinny
  • Registratie: Januari 2000
  • Laatst online: 25-07 18:17
Bij bijna elk project wat ik doe loop ik wel een keer tegen dit probleem aan en ik kan er maar geen oplossing voor vinden. En dat, terwijl ik toch al heel veel topics/manuals hierover gevonden/gelezen heb.

Situatie nu, alleen de (redelijk) relevante velden staan hierin.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Tabel winkels
----
id
naam
adres

Tabel artikelen
---------------
id 
omschrijving
prijs

Tabel winkels_voorraad
----------------------
winkel_id
artikel_id
datum
aantal

Omdat het artikelbestand nogal groot is en er ook nog eens een redelijk aantal winkels is, heb ik besloten om geen '0' voorraaden op te slaan. Is een artikel niet in de 'voorraad' tabel aanwezig, dan is de voorraad 0.

Wat ik nu wil is een query die als resultaat een lijst met alle winkels met voorraad (ook als die 0 is) van een bepaald artikel, en op een bepaalde datum.
code:
1
2
3
4
5
SELECT winkels.id, sum(aantal)
FROM winkels LEFT JOIN winkels_voorraad 
ON winkels.id = winkels_voorraad.winkel_id
WHERE artikel_id = x AND datum = y
GROUP BY winkels.id

Als resultaat krijg ik hieruit alleen de winkels die ook daadwerkelijk in de 'voorraad' tabel aanwezig zijn, terwijl ik altijd begrepen heb dat je dan NULL waarden terug moet krijgen voor de niet-aanwezige winkels ?

Waar zit de denkfout ? (ben ik hopelijk voor eens en voor altijd van dit 'probleem' af)

SIZE does matter.
"You're go at throttle up!"


Verwijderd

gewoon 0 waarden opslaan!
hoeveel is NULL + NULL ?

Verwijderd

(0 != NULL) == true;

  • Skinny
  • Registratie: Januari 2000
  • Laatst online: 25-07 18:17
Op vrijdag 12 juli 2002 15:08 schreef sjako het volgende:
gewoon 0 waarden opslaan!
hoeveel is NULL + NULL ?
:? :?

Rekensommetje dan:
code:
1
2
3
4
5
6
7
8
9
10
11
8500 artikelen
50 winkels
365 dagen in een jaar

8500 * 50 * 365 = 155.125.000 records 

Gemiddeld aantal voorradige artikelen = 700

700 * 50 * 365 = 12.775.000

155.125.000 - 12.775.000 = 142.350.000

Voor 'niets' dus even 142 miljoen records opslaan... ??? dacht het niet.
(0 != NULL) == true;
Weet ik, maar het moet toch mogelijk zijn om gewoon NULL's terug te krijgen oid.. Dat ik daaruit zelf in mijn programma nullen maak, doet er dan toch niet toe ?

SIZE does matter.
"You're go at throttle up!"


  • whoami
  • Registratie: December 2000
  • Laatst online: 20:22
Het antwoord ligt in
code:
1
OUTER JOINS

Ga dus even in de manual op zoek naar die term...

https://fgheysels.github.io/


Dit topic is gesloten.