Skip to content

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