Je suis très nouveau sur PostGIS, PostgreSQL et SQL en général.
J'ai 44 tables dans ma base de données PostGIS, et chacune représente une couche différente de données vectorielles. Chacun a été chargé à partir d'un fichier de formes distinct et chacun a une colonne qui décrit la géométrie de cette couche, appeléewkb_geometry
Je souhaite sélectionner un polygone spécifique sur une couche, puis récupérer TOUTE la géométrie à partir d'un sous-ensemble de couches qui chevauchent le cadre de délimitation de ce polygone. Je ne me sens pas pointilleux sur l'ordre qui sort, mais il serait utile qu'il soit organisé par les tables dont chaque groupe de géométrie est issu.
Voici un exemple de mon instruction SQL:
SELECT
ST_AsEWKT(wkb_geometry) /* Some of this data has z values, hence the EWKT */
FROM
table2, table3, table4, table5
WHERE
wkb_geometry &&
(
SELECT
wkb_geometry
FROM
table1
WHERE
ogc_fid = 25
);
qui renvoie une erreur:
column reference "wkb_geometry" is ambiguous
/* note that every table that I am selecting from has a "wkb_geometry" column */
Quel est le bon moyen de le faire?
Réponses:
tout d'abord, vous obtenez ce message d'erreur, car vous n'avez pas spécifié à partir de quelle table vous souhaitez sélectionner la colonne de géométrie (et comme ils ont tous le même nom, postgres devient confus). C'est pourquoi vous obtenez le message d'erreur
Si vous avez le même nom de colonne dans plusieurs tables, ajoutez toujours le nom de la table devant le nom de la colonne: par exemple. table1.wkb_geometry
Pour votre requête: Si je vous comprends bien, vous voulez trouver les objets dans différents calques qui coupent un objet spécifique dans un calque spécifique.
Commencez à regarder deux tableaux à la fois au début pour rester simple:
Table1 est la table avec l'objet spécifique, table2 la table avec les autres objets
Maintenant, si vous souhaitez ajouter des objets supplémentaires à partir d'autres tables, vous avez besoin de UNION ALL, comme Sasa l'a déjà mentionné. Les noms de colonnes n'ont pas besoin d'être les mêmes, mais le nombre de colonnes et les types de données!
Vous pouvez rencontrer des problèmes en ouvrant la requête dans une visionneuse, car il n'y a pas d'ID unique. Un moyen simple de résoudre ce problème consiste à enregistrer le résultat sous forme de tableau avec une colonne id.
s'amuser
la source
Je n'ai pas de client SQL devant moi, donc ce n'est peut-être pas précis à 100%, mais vous voudrez quelque chose comme:
etc. Votre problème est que la requête sql ne sait pas à quelle table (table2 / 3/4/5) vous faites référence lorsque vous spécifiez SELECT ST_AsEWKT (wkb_geometry), donc la référence ambiguë. Vous pouvez également ajouter un ORDER BY aux résultats si vous souhaitez les commander
la source