dannyboy
wzl-lid
Sinds 31/5/2005
T: 108
R: 883
|
25/3/2008 -
12:14u
| Quote
|
Even de situatie schetsen:
Ik heb een database met gegevens over medische producten. Ik heb een tabel producten die de naam, gebruik, vervalbaarheid (of het product kan vervallen) etc van de producten bijhoudt. Ik heb een tabel voorraad_v die het aantal vervalbare producten in de voorraad bijhoudt (bv: perdolan - 10 pillen - 02/2009) Ik heb een tabel voorraad_nv die het aantal niet vervalbare producten in de voorraad bijhoudt (bv: windel 5cm - 30 stuks) De reden dat ik deze 2 laatste tabellen apart heb, is dat ik bij voorraad_nv enkel het product als primaire sleutel heb (elk product kan maar 1 keer voorkomen) en bij voorraad_v heb ik het product en de vervaldatum als gecombineerde primaire sleutel (er kunnen bv 10 pillen van product A op 03/2009 vervallen, maar hetzelfde product A kan ook 15 pillen hebben die op 05/2009 vervallen) niet vervalbare producten kunnen niet in de voorraad_v tabel komen want dan zou de vervaldatum NULL zijn en dat mag niet in een primaire sleutel.
Nu wil ik een query hebben die me de inhoud van voorraad_v en voorraad_nv samen weergeeft. bv: perdolan - 10 pillen - 02/2009 windel 5cm - 30 stuks - NULL perdolan - 12 pillen - 03/2009
Ik heb niet direct een idee over hoe deze query eruit moet komen te zien.
PS: de voorbeelden zijn niet zoals ze letterlijk in mijn tabel staan, ik werk met product_id enzo, maar ik vond dit duidelijker als voorbeeld. Dus liefst gene zever over slechte normalisatie. Ik moet gewoon een query hebben die de inhoud van 2 ongeveer dezelfde tabellen samen zet.
|
D3ton8oR
Stella-man
Sinds 15/10/2003
T:32 -
R:1581
|
25/3/2008 -
13:20u
| Quote
|
aangezien in bepaalde gevallen het nut van normalisatie mij totaal ontgaat zou ik al zeker nie gezeverd hebben daarover  
Uw select om uw 2 tabellen in 1 overzicht terug te geven zal zoiets zijn dan (wsl nog wel een join naar product bij elke select als je met ID werkt ipv naam):
SELECT naam_v, aantal_v, datum_v FROM voorraad_v UNION ALL SELECT naam, aantal_nv, null FROM voorraad_nv
De beperkingen waar je 't over hebt (qua datum en zo) leg je normaal op tabelniveau en niet op query-niveau, dus daar zou je normaal geen rekening moeten mee houden in je select.
Edit: met joins zal het iets dergelijks geven dus:
SELECT prod_naam, aantal_v, datum_v FROM Producten LEFT OUTER JOIN Voorraad_v ON prod_id = v_prod_id UNION ALL SELECT prod_naam, aantal_nv, null FROM Producten LEFT OUTER JOIN Voorraad_nv ON prod_id = nv_prod_id
Laatst aangepast door
D3ton8oR
op 26/03/2008 9:48:21u
(2x aangepast)
|
dannyboy
wzl-lid
Sinds 31/5/2005
T:108 -
R:883
|
26/3/2008 -
11:47u
| Quote
|
D3ton8oR schreef: aangezien in bepaalde gevallen het nut van normalisatie mij totaal ontgaat zou ik al zeker nie gezeverd hebben daarover  
Uw select om uw 2 tabellen in 1 overzicht terug te geven zal zoiets zijn dan (wsl nog wel een join naar product bij elke select als je met ID werkt ipv naam):
SELECT naam_v, aantal_v, datum_v FROM voorraad_v UNION ALL SELECT naam, aantal_nv, null FROM voorraad_nv
De beperkingen waar je 't over hebt (qua datum en zo) leg je normaal op tabelniveau en niet op query-niveau, dus daar zou je normaal geen rekening moeten mee houden in je select.
Edit: met joins zal het iets dergelijks geven dus:
SELECT prod_naam, aantal_v, datum_v FROM Producten LEFT OUTER JOIN Voorraad_v ON prod_id = v_prod_id UNION ALL SELECT prod_naam, aantal_nv, null FROM Producten LEFT OUTER JOIN Voorraad_nv ON prod_id = nv_prod_id dat lijkt me het proberen waard. ik had nog nooit van een UNION ALL statement gehoord
|
D3ton8oR
Stella-man
Sinds 15/10/2003
T:32 -
R:1581
|
26/3/2008 -
11:55u
| Quote
|
't Is nochtans een heel handig ding! 
Edit: ge hebt ook een gewone "UNION" (zonder de All dus).. Da's meer een join-achtige bewerking maar met extra voorwaarden dacht ik (kolommen moeten zelfde type zijn of zo, weet het nie just meer). Moet maar eens opzoeken
Laatst aangepast door
D3ton8oR
op 26/03/2008 11:56:38u
(1x aangepast)
|
dannyboy
wzl-lid
Sinds 31/5/2005
T:108 -
R:883
|
26/3/2008 -
16:20u
| Quote
|
getest en het werkt uitstekend. merci
|