Rassembler des données de plusieurs tables
La clause UNION
peut être utilisée pour regrouper les données de sources différentes dans une même table. Le UNION ALL
fait la même choses, mais sans réaliser de dédoublonnement, ce qui est plus rapide.
Rassembler les routes et les chemins ensemble, en ajoutant un champ "nature" pour les différencier
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 | -- Rassembler des données de tables différentes
-- On utilise une UNION ALL
(SELECT 'chemin' AS nature,
geom,
ROUND(ST_LENGTH(geom))::integer AS longueur
FROM z_formation.chemin
LIMIT 100)
-- UNION ALL est placé entre 2 SELECT
UNION ALL
(SELECT 'route' AS nature,
geom,
ROUND(ST_LENGTH(geom))::integer AS longueur
FROM z_formation.route
LIMIT 100)
-- Le ORDER BY doit être réalisé à la fin, et non sur chaque SELECT
ORDER BY longueur
|
Si on doit réaliser le même calcul sur chaque sous-ensemble (chaque SELECT), on peut le faire en 2 étapes via une sous-requête (ou une clause WITH)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 | SELECT
-- on récupère tous les champs
source.*,
-- on calcule la longueur après rassemblement des données
st_length(geom) AS longueur
FROM (
(SELECT id, geom
FROM z_formation.chemin
LIMIT 100)
UNION ALL
(SELECT id, geom
FROM z_formation.route
LIMIT 100)
) AS source
ORDER BY longueur DESC
;
|
Continuer vers Enregistrer les requêtes: VIEW