Soy muy nuevo en PostGIS, PostgreSQL y SQL en general.
Tengo 44 tablas en mi base de datos PostGIS, y cada una representa una capa diferente de datos vectoriales. Cada uno se cargó desde un archivo de forma separado, y cada uno tiene una columna que describe la geometría de esa capa, llamadawkb_geometry
Quiero seleccionar un polígono específico en una capa y luego recuperar TODA la geometría de un subconjunto de capas que se superponen al cuadro delimitador de ese polígono. No me siento quisquilloso con el orden de salida, pero sería útil si estuviera organizado por las tablas de cada grupo de geometría.
Aquí hay una muestra de mi declaración 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
);
que devuelve un error:
column reference "wkb_geometry" is ambiguous
/* note that every table that I am selecting from has a "wkb_geometry" column */
¿Cuál es la forma correcta de hacer esto?
Respuestas:
En primer lugar, recibe este mensaje de error, ya que no especificó de qué tabla desea seleccionar la columna de geometría (y dado que todos tienen su mismo nombre, Postgres se está confundiendo). Es por eso que recibes el mensaje de error
Si tiene el mismo nombre de columna en varias tablas, siempre agregue el nombre de la tabla delante del nombre de la columna: por ejemplo. table1.wkb_geometry
Para su consulta: si lo entiendo bien, desea encontrar los objetos en diferentes capas que se cruzan con un objeto específico en una capa específica.
Comience a mirar dos tablas a la vez al principio para que sea simple:
Table1 es la tabla con el objeto específico, table2 la tabla con los otros objetos
Ahora, si desea agregar objetos adicionales de otras tablas, necesita UNION ALL, como ya mencionó Sasa. Los nombres de columna no necesitan ser iguales, ¡sino el número de columnas y los tipos de datos!
Puede tener problemas al abrir la consulta en un visor, ya que no hay una identificación única. Una manera simple de resolver esto es guardar el resultado como una tabla con una columna de identificación.
que te diviertas
fuente
No tengo un cliente SQL delante de mí, por lo que esto puede no ser 100% exacto, pero querrás algo como:
y así. Su problema es que la consulta sql no sabe a qué tabla (tabla2 / 3/4/5) se refiere cuando especifica SELECT ST_AsEWKT (wkb_geometry), por lo tanto, la referencia ambigua. También puede agregar un ORDER BY a los resultados si desea ordenarlos
fuente