Pages: 1
- Sujet précédent - intersection entre 3 tables : comportement incomprensible - Sujet suivant
#1 Wed 12 August 2009 19:57
intersection entre 3 tables : comportement incomprensible
Bonsoir,
peut-ĂȘtre est-ce dĂ» Ă la fatigue mais je cale sur une requĂȘte d'intersection dont je ne m'explique pas le rĂ©sultat :
je souhaite compter le nombre de ZNIEFF qui sont en LozÚre mais qui ne sont pas sur le territoire du Parc National des Cévennes.
J'utilise pour cela 3 tables : version_perimetre_znieff_gen_2, perimetre et departement
et une requĂȘte d'intersection :
Code:
select count(distinct znieff_gen_2_id_znieff) from version_perimetre_znieff_gen_2 JOIN departement ON st_intersects(departement.geometrie, version_perimetre_znieff_gen_2.geometrie) JOIN perimetre ON st_intersects(perimetre.geometrie, version_perimetre_znieff_gen_2.geometrie) is false WHERE departement.num_insee='48' AND type_perimetre like '%pnc%'
Le rĂ©sultat de cette requĂȘte est 126 et est faux
En effet, j'ai 151 ZNIEFF en LOZERE :
Code:
select count(distinct znieff_gen_2_id_znieff) from version_perimetre_znieff_gen_2 JOIN departement ON st_intersects(departement.geometrie, version_perimetre_znieff_gen_2.geometrie) where departement.num_insee='48'
Et 80 ZNIEFF en LozĂšre qui sont sur le territoire du parc :
Code:
select count(distinct znieff_gen_2_id_znieff) from version_perimetre_znieff_gen_2 JOIN departement ON st_intersects(departement.geometrie, version_perimetre_znieff_gen_2.geometrie) JOIN perimetre ON st_intersects(perimetre.geometrie, version_perimetre_znieff_gen_2.geometrie) where departement.num_insee='48' AND type_perimetre like '%pnc%'
Le rĂ©sultat que j'attends de ma premiĂšre requĂȘte est 71 (80+71=151).
Or la seule syntaxe qui me permette d'avoir ce bon résultat utilise une sous requete :
Code:
select count(distinct znieff_gen_2_id_znieff) from version_perimetre_znieff_gen_2 JOIN departement ON st_intersects(departement.geometrie, version_perimetre_znieff_gen_2.geometrie) where departement.num_insee='48' AND znieff_gen_2_id_znieff NOT IN ( select znieff_gen_2_id_znieff from version_perimetre_znieff_gen_2 JOIN perimetre ON st_intersects(perimetre.geometrie, version_perimetre_znieff_gen_2.geometrie) where type_perimetre like '%pnc%')
Comprenez vous ce comportement ? je décortique le problÚme depuis 2 bonnes heures mais je ne vois pas le début d'une explication.
Merci d'avance,
Mathieu Bossaert
Dernière modification par Mathieu BOSSAERT (Fri 14 August 2009 11:46)
Mathieu BOSSAERT
Association GeoRezo
Hors ligne
#2 Fri 14 August 2009 10:56
Re: intersection entre 3 tables : comportement incomprensible
Bonjour,
j'ai compris l'origine du problĂšme :
j'ai deux objets de type 'pnc' : la zone centrale et la zone périphérique.
ConsidĂ©rons une znieff complĂ©tement incluse dans la zone centrale, lors de la requĂȘte, l'intersection avec la zone pĂ©riphĂ©rique sera fausse et la znieff sera comptĂ©e.
Mon résultat (126) contenait donc toutes les ZNIEFF de LozÚre (151) sauf celles qui sont à la fois sur la zone centrale et sur la zone périphérique du Parc (25).
La solution est de travailler avec l'union des objets de mĂȘme type dans ma table perimetre :
Code:
select count( znieff_gen_2_id_znieff) from version_perimetre_znieff_gen_2 JOIN departement ON st_intersects(departement.geometrie, version_perimetre_znieff_gen_2.geometrie) JOIN (select st_union(geometrie) as geometrie FROM perimetre where type_perimetre like '%pnc%' ) perimetre ON st_intersects(perimetre.geometrie, version_perimetre_znieff_gen_2.geometrie) is false WHERE departement.num_insee='48'
Le "count( distinct )" n'aidait pas Ă y voir claire et mes neurones manquent un peu de peps en ce moment...
L'affichage des znieff rĂ©sultant de la requĂȘte m'a bien aidait Ă comprendre le soucis!
Dernière modification par Mathieu BOSSAERT (Fri 14 August 2009 12:06)
Mathieu BOSSAERT
Association GeoRezo
Hors ligne
Pages: 1
- Sujet précédent - intersection entre 3 tables : comportement incomprensible - Sujet suivant

