JOINS
Normalt får I kun brug for:
- INNER JOIN (default)
- LEFT JOIN
- CROSS JOIN (Sjældent)
Hent BBR bygninger med kendte anvendelseskoder:
SELECT
byg.bygning_id,
byg.bygningsnr,
byg.opfoerelse_aar,
kode.byg_anvendelse_tekst
FROM
kursus.co40100t byg JOIN
legeplads.bygningsanvendelse kode ON (byg.byg_anvend_kode = kode.byg_anvend_kode)
LIMIT 10
Hent alle BBR bygninger (også dem med ukendte anvendelseskoder):
SELECT
byg.bygning_id,
byg.bygningsnr,
byg.opfoerelse_aar,
kode.byg_anvendelse_tekst
FROM
kursus.co40100t byg LEFT JOIN
legeplads.bygningsanvendelse kode ON (byg.byg_anvend_kode = kode.byg_anvend_kode)
LIMIT 10
Optæl bygninger med kendte anvendelseskoder:
SELECT COUNT(1)
FROM
kursus.co40100t byg JOIN
legeplads.bygningsanvendelse kode ON (byg.byg_anvend_kode = kode.byg_anvend_kode)
Optæl bygninger med kendte anvendelseskoder:
SELECT COUNT(1)
FROM
kursus.co40100t byg LEFT JOIN
legeplads.bygningsanvendelse kode ON (byg.byg_anvend_kode = kode.byg_anvend_kode)
Selects uden FROM kan med fordel benyttes til at oversætte kodeværdier til tekster (hvis man mangler kodelisten). Her anvendes en CTE som tabel
WITH lookup_ja_nej AS
(SELECT '0'::text AS kode, 'Bygning er under minimum'::text AS tekst UNION
SELECT '1' , 'Bygning er ikke under minimum')
SELECT
byg.fot_id,
COALESCE(kode.tekst, '<under minimums kode er udefineret!!')
FROM
kursus.bygning byg LEFT JOIN
lookup_ja_nej kode ON (byg.under_min = kode.kode)
LIMIT 100
Bemærk:
- Brugen af konstant table (flere rækker vha. UNION keyword)
- Type casting ::text
- LEFT JOIN for at få alle bygninger med
- COALESCE for at give meningsfuld tekst til NULL values
Berig dine egne data med spatialle joins
SELECT
a.ogc_fid,
a.wkb_geometry,
a.adresse,
lr.lokalraad,
lr.hjemmeside
FROM raw_data.adresser_font_point a
JOIN raw_data.lokalraad lr
ON (ST_Contains(lr.geom,a.wkb_geometry))
Øvelse
Prøv at skrive JOINS på nogle af jeres egne data