Bonjour,
J'ai remarqué un comportement étrange de System.Data.Sqlite avec les jointures. J'ai 2 tables, Lignes et Pylones (Chaque ligne étant associée à N pylônes). Chaque table contient une colonne de géométrie à laquelle est associée un index spatial. En utilisant un outil Spatialite (Spatialite GUI 1.4), la requête suivante me retourne bien tous les pylônes appartenant aux 2 lignes qui m'intéressent et qui ont une intersection avec les coordonnées précisées. Je n'utilise pas la fonction RTreeIntersect car elle n'est pas disponible dans SpatialiteSharp (Extension Spatialite pour System.Data.Sqlite).
Par contre, dans mon application en C# utilisant System.Data.Sqlite 1.0.93.0 la même requête ne me renvoie qu'un seul enregistrement, le premier. Le comportement est le même si je fais la requête avec l'explorateur de serveurs de Visual Studio 2013.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 SELECT P.* FROM Pylones P JOIN Lignes L ON L.lig_id = P.lig_id AND L.lig_id IN (3,4) JOIN idx_Pylones_pyl_geom I ON P.pyl_id = I.pkid AND I.xmax >= 910202.5 AND I.ymax >= 6506392.5 AND I.xmin <= 924587.5 AND I.ymin <= 6513427.5
En modifiant la requête de cette manière, c'est à dire en retirant les jointures, cela fonctionne dans tous les cas.
Quelqu'un aurait-il une explication de ce curieux phénomène ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 SELECT pyl_id, lig_id, pyl_num, pyl_geom FROM Pylones WHERE lig_id IN (3,4) AND pyl_id IN (SELECT pkid FROM idx_Pylones_pyl_geom WHERE xmax >= 910202.5 AND ymax >= 6506392.5 AND xmin <= 924587.5 AND ymin <= 6513427.5)
Partager