2 votos

La unión por la izquierda produce un resultado extraño en la capa virtual de QGIS.

Quiero unir dos capas, una capa de polígonos "plan" y una capa puntual "education point" . Mi objetivo es unir los datos de "education point" a la capa "plan" si el punto está dentro de un polígono.

Como algunos polígonos no se cruzan con ningún punto, y todavía quiero mantener esos polígonos visibles, he utilizado left join . Pero el resultado sólo muestra los polígonos que se cruzan con un punto.

Esta es mi pregunta:

SELECT pl.geometry,ed.*
FROM "plan" AS pl
LEFT JOIN "education point" AS 'ed' ON st_intersects(pl.geometry,ed.geometry)
WHERE pl."function" in ('primary school', 'middle school')
AND ed."studyArea"='yes'

5voto

Rafael Cristaldo Puntos 1

Se debe a la última parte de la cláusula where: and ed."studyArea"='yes'

Vince se me adelantó.

Tan pronto como incluya criterios WHERE como ese en la tabla a la derecha de la unión, se convierte implícitamente en una unión interna. Piénsalo: si no hay education point para que se cruce con el plan entonces el valor de ed. "studyArea" no será 'yes', será NULL, lo que no coincide con sus criterios. Puedes cambiar la última parte para que la consulta diga:

select pl.geometry,ed.*
from "plan" as pl
left JOIN "education point"as'ed' on st_intersects(pl.geometry,ed.geometry)
where pl."function" in ('primary school','middle school') and 
(ed."studyArea"='yes' or ed."studyArea" IS NULL)

O puede mover la condición de filtrado de la tabla derecha a la cláusula JOIN:

select pl.geometry,ed.*
from "plan" as pl
left JOIN "education point"as'ed' on st_intersects(pl.geometry,ed.geometry)
    AND ed."studyArea"='yes'
where pl."function" in ('primary school','middle school')

A mí también me gusta el segundo enfoque, parece expresar mejor tu intención, que es unirte a la plan al subconjunto de registros de la tabla education point tabla que tienen studyArea='yes'

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X