gvSIG bugs #5514

[PG] El buscador de atributos no descarta valores que se indican en la fórmula usando "is NOT"

Added by Mario Carrera over 3 years ago. Updated almost 3 years ago.

Status:Closed% Done:

0%

Priority:NormalSpent time:-
Assignee:Óscar Martínez
Category:Document table
Target version:-
Severity:Minor Add-on version:
gvSIG version:2.5.1 Add-on build:
gvSIG build: Add-on resolve version:
Operative System: Add-on resolve build:
Keywords:ARENA2_GVA_2020 Proyecto:PGSSV 1
Has patch: Hito:
Add-on name:Unknown

Description

Quiero que no aparezcan en el listado de elementos los valores 10 ni 12. Estoy usando la condición "is NOT".

Para mi no se aplica bien en esta consulta de la tabla de ACCIDENTES, ya que espero que no liste los accidentes con condición ACCION_PEA=10 y ACCION_PEA=12, sin embargo si lista el accidente "201846190000815" que tiene ACCION_PEA=12:

( (((( ("ARENA2_ACCIDENTES"."TITULARIDAD_VIA" = 2) ) AND ( ("ARENA2_ACCIDENTES"."FECHA_ACCIDENTE" >= DATE '2018-01-01') )) AND ( ("ARENA2_ACCIDENTES"."FECHA_ACCIDENTE" <= DATE '2018-12-31') )) AND ( ("ARENA2_ACCIDENTES"."TOTAL_PEATONES" >= 1) ))) AND
( (( EXISTS = ("ARENA2_ACCIDENTES"."LID_ACCIDENTE") ) AND ("ARENA2_PEATONES"."ACCION_PEA" is NOT 10 AND "ARENA2_PEATONES"."ACCION_PEA" is NOT 12)) LIMIT 1), 'EXISTS2a8f6b08044445e3b152b9f9502666d8') ) ))

Como se puede ver en la Tabla PEATONES, el accidente "201846190000815" que tiene ACCION_PEA=12:

( ((( (FOREING_VALUE('ID_ACCIDENTE.TITULARIDAD_VIA') = 2) ) AND ( (FOREING_VALUE('ID_ACCIDENTE.FECHA_ACCIDENTE') >= DATE '2018-01-01') )) AND ( (FOREING_VALUE('ID_ACCIDENTE.FECHA_ACCIDENTE') <= DATE '2018-12-31') ))) AND
( (( ("ARENA2_PEATONES"."ACCION_PEA" = 10) ) OR ( ("ARENA2_PEATONES"."ACCION_PEA" = 12) )))

Sin embargo, si le pides en la TABLA ACCIDENTES que te liste los valores con ACCION_PEA=10 o ACCION_PEA=12 si lo hace correctamente:

( (((( ("ARENA2_ACCIDENTES"."TITULARIDAD_VIA" = 2) ) AND ( ("ARENA2_ACCIDENTES"."FECHA_ACCIDENTE" >= DATE '2018-01-01') )) AND ( ("ARENA2_ACCIDENTES"."FECHA_ACCIDENTE" <= DATE '2018-12-31') )) AND ( ("ARENA2_ACCIDENTES"."TOTAL_PEATONES" >= 1) ))) AND
( (( EXISTS = ("ARENA2_ACCIDENTES"."LID_ACCIDENTE") ) AND ("ARENA2_PEATONES"."ACCION_PEA" = 10)) LIMIT 1), 'EXISTS2a8f6b08044445e3b152b9f9502666d8') ) OR ( EXISTS = ("ARENA2_ACCIDENTES"."LID_ACCIDENTE") ) AND ("ARENA2_PEATONES"."ACCION_PEA" = 12)) LIMIT 1), 'EXISTS8f3c998bcfd14debbb0fd04d30310980') )))

History

#1 Updated by Óscar Martínez over 3 years ago

  • Status changed from New to Fixed

El resultado es correcto para esa consulta. El problema está en la propia consulta y en lo que se quiere obtener. El accidente 201846190000815 contiene un peatón que no es de tipo 10 ni 12, y por tanto, es un accidente que debe entrar en esa consulta.

Para descartar que los accidentes no contengan ninguno de esos tipos de peatones se realizaría con la siguiente consulta. La modificación queda realizada en la parte de los exists. En esta nos aseguramos que no haya ningún peaton de ninguno de esos tipos:

( (((( ("ARENA2_ACCIDENTES"."TITULARIDAD_VIA" = 2) ) AND ( ("ARENA2_ACCIDENTES"."FECHA_ACCIDENTE" >= DATE '2018-01-01') )) AND ( ("ARENA2_ACCIDENTES"."FECHA_ACCIDENTE" <= DATE '2018-12-31') )) AND ( ("ARENA2_ACCIDENTES"."TOTAL_PEATONES" >= 1) ))) AND ( (( NOT EXISTS = ("ARENA2_ACCIDENTES"."LID_ACCIDENTE") ) AND ("ARENA2_PEATONES"."ACCION_PEA" = 12)) LIMIT 1), 'exist1')

AND NOT EXISTS = ("ARENA2_ACCIDENTES"."LID_ACCIDENTE") ) AND ("ARENA2_PEATONES"."ACCION_PEA" = 10)) LIMIT 1), 'exist2') ) ))

#2 Updated by Óscar Martínez over 3 years ago

La consulta correcta es:

( (((( ("ARENA2_ACCIDENTES"."TITULARIDAD_VIA" = 2) ) AND ( ("ARENA2_ACCIDENTES"."FECHA_ACCIDENTE" >= DATE '2018-01-01') )) AND ( ("ARENA2_ACCIDENTES"."FECHA_ACCIDENTE" <= DATE '2018-12-31') )) AND ( ("ARENA2_ACCIDENTES"."TOTAL_PEATONES" >= 1) ))) AND ( (( NOT EXISTS((SELECT "LID_ACCIDENTE" FROM "ARENA2_PEATONES" WHERE (( ("ARENA2_PEATONES"."ID_ACCIDENTE") = ("ARENA2_ACCIDENTES"."LID_ACCIDENTE") ) AND ("ARENA2_PEATONES"."ACCION_PEA" = 12)) LIMIT 1), 'exist1')

AND NOT EXISTS((SELECT "LID_ACCIDENTE" FROM "ARENA2_PEATONES" WHERE (( ("ARENA2_PEATONES"."ID_ACCIDENTE") = ("ARENA2_ACCIDENTES"."LID_ACCIDENTE") ) AND ("ARENA2_PEATONES"."ACCION_PEA" = 10)) LIMIT 1), 'exist2') ) ))

#3 Updated by Álvaro Anguix almost 3 years ago

  • Status changed from Fixed to Closed

Also available in: Atom PDF