Stel we hebben een huis waarvan we een aantal dingen opslaan (zie http://www.funda.nl/wonin...ult.aspx?tab=PlaatsOfLand)
Voorzieningen
Tuin
Balkon/dakterras
C.V.-ketel
Lift
Garage
Schuur/berging
Bedrijfsruimte
Open haard
Zwembad
Ligging
Aan bosrand
Aan drukke weg
Aan park
Aan rustige weg
Aan water
Beschutte ligging
Buiten bebouwde kom
In centrum
In woonwijk
Open ligging
Vrij uitzicht
isolatie
dubbelglas
spouwmuurisolatie
gevelisolatie
We onderscheiden de volgende tabellen:
huis
huis_voorziening
voorziening
huis_ligging
ligging
huis_isolatie
isolatie
Een huis heeft dus een veel op veel relatie met voorzienig en met ligging.
Voorbeeld
Huis A heeft als voorzieningen een zwembad, tuin, garage (3 stuks), heeft de volgende liggingen: aan bosrand, Vrij uitzicht (2 stuk) en is volledig geïsoleerd: dubbelglas, spouwmuurisolatie en gevelisolatie
Scenario
Er dient gezocht te worden naar alle huizen met ligging Aan water en isolatie Dubbelglas.
Simpelweg alle tabellen joinen levert een vrij groot cartesiaans product op: 3 * 2 * 3 = 18 waarop vervolgens de filters worden toegepast. Dit lijkt mij niet de oplossing.
Oftewel: je wilt doorzoeken op een selectie dus (uit de losse pols) heb ik dit sql statement gemaakt:
Wat is jullie visie hierop?
Voorzieningen
Tuin
Balkon/dakterras
C.V.-ketel
Lift
Garage
Schuur/berging
Bedrijfsruimte
Open haard
Zwembad
Ligging
Aan bosrand
Aan drukke weg
Aan park
Aan rustige weg
Aan water
Beschutte ligging
Buiten bebouwde kom
In centrum
In woonwijk
Open ligging
Vrij uitzicht
isolatie
dubbelglas
spouwmuurisolatie
gevelisolatie
We onderscheiden de volgende tabellen:
huis
huis_voorziening
voorziening
huis_ligging
ligging
huis_isolatie
isolatie
Een huis heeft dus een veel op veel relatie met voorzienig en met ligging.
Voorbeeld
Huis A heeft als voorzieningen een zwembad, tuin, garage (3 stuks), heeft de volgende liggingen: aan bosrand, Vrij uitzicht (2 stuk) en is volledig geïsoleerd: dubbelglas, spouwmuurisolatie en gevelisolatie
Scenario
Er dient gezocht te worden naar alle huizen met ligging Aan water en isolatie Dubbelglas.
Simpelweg alle tabellen joinen levert een vrij groot cartesiaans product op: 3 * 2 * 3 = 18 waarop vervolgens de filters worden toegepast. Dit lijkt mij niet de oplossing.
Oftewel: je wilt doorzoeken op een selectie dus (uit de losse pols) heb ik dit sql statement gemaakt:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
| WITH derived1 AS ( SELECT huis_id FROM liggingen INNER JOIN liggingen_huis ON liggingen_huis.huis_id = liggingen.id WHERE liggingen.name = 'Aan water' ), derived2 AS ( SELECT huis_id FROM derived1 INNER JOIN isolatie_huis ON isolatie_huis.huis_id = derived1.huis_id INNER JOIN isolatie ON isolatie_huis.huis_id = isolatie.id AND isolatie.name = 'dubbelglas' ) SELECT * FROM huis WHERE derived2.id IN(SELECT huis_id FROM derived2) |
Wat is jullie visie hierop?
[ Voor 8% gewijzigd door Verwijderd op 16-03-2010 16:46 ]