PDA

Ver la Versión Completa : Resultado distinto de un query


Angel.Matilla
08-11-2019, 17:59:56
Buenas tardes. Tengo un query que se ejecuta sobre un vista en FB 2.5 y con los mismos valores da resultados diferentes. Me explico.

Si ejecuto el query así:
SELECT A.Municipio, A.CodJun, A.CodCom, A.CodPar, 10 * A.CodPro + A.Cerrado CodPro, A.Padron,
A.Censo CenEle, A.Concejales, A.Actualiza, A.Partido_alcalde, A.Nombre_alcalde, A.Sede,
A.CodPres, A.Presidente, A.CodPort, A.Portavoz, A.Constitucion, A.TlfSede, A.Afiliados,
A.RatAfi, A.Observaciones
FROM Dl01 A
WHERE A.CodPrv = (SELECT Literal FROM Instalacion WHERE Etiqueta = 'Provincia')
AND A.Codigo = 14921
AND A.CodJun = (SELECT FIRST 1 Codigo FROM Junta WHERE CodPrv = A.CodPrv AND Municipio = A.Codigo)
AND A.CodPro = (SELECT MAX(Codigo) FROM Elecciones WHERE CodPrv = A.CodPrv)
Me da este resultado
https://i.ibb.co/G7kK9zY/Resultado1.jpg
Pero si ejecuto el query así:
SELECT *
FROM Dl01 A
WHERE A.CodPrv = (SELECT Literal FROM Instalacion WHERE Etiqueta = 'Provincia')
AND A.Codigo = 14921
AND A.CodJun = (SELECT FIRST 1 Codigo FROM Junta WHERE CodPrv = A.CodPrv AND Municipio = A.Codigo)
AND A.CodPro = (SELECT MAX(Codigo) FROM Elecciones WHERE CodPrv = A.CodPrv)
entonces el resultado es este:
https://i.ibb.co/XXmLXvK/Resultado2.jpg
y no entiendo el por qué del distinto comportamiento el query.

Casimiro Notevi
08-11-2019, 18:59:12
Pon alias para cada tabla y campo. Esos selects pueden dar resultados impredecibles, como es tu caso.
SELECT a.*
FROM Dl01 A
WHERE A.CodPrv = (SELECT i.Literal FROM Instalacion i WHERE i.Etiqueta = 'Provincia')
AND A.Codigo = 14921
AND A.CodJun = (SELECT FIRST 1 j.Codigo FROM Junta j WHERE j.CodPrv = A.CodPrv AND j.Municipio = A.Codigo)
AND A.CodPro = (SELECT MAX(e.Codigo) FROM Elecciones e WHERE e.CodPrv = A.CodPrv)

Angel.Matilla
08-11-2019, 19:12:38
Pon alias para cada tabla y campo. Esos selects pueden dar resultados impredecibles, como es tu caso.
Gracias por la respuesta. Pero el problema está en el primero que he puesto, tal cual está, no devuelve nada en esos dos campos pero el segundo sí y es eso lo que me tiene mosqueado. Si uso la sintaxis que me sugieres (SELECT A.*) funciona también perfectamente, como el código que he ouetso yo.

Casimiro Notevi
08-11-2019, 20:42:28
Me refiero tanto al primero como al segundo.

egostar
09-11-2019, 01:08:44
Hola

Que valor tiene A.CodPro?

Es muy probable que sea null y por eso no te muestra resultados.

Saludos

Angel.Matilla
09-11-2019, 09:59:31
Hola

Que valor tiene A.CodPro?

Es muy probable que sea null y por eso no te muestra resultados.

Saludos
No. Ese campo siempre tiene valor porque en la definición de la tabla tiene un SET DEFAULT. Además si fuera null saldría mal en ambos querys ya que la diferencia entre ambos es únicamente que campos selecciono: o una parte o todos los de la vista.

Angel.Matilla
09-11-2019, 10:00:13
Me refiero tanto al primero como al segundo.
Ok. He probado en el primer query tu sugerencia y me da el mismo resultado erróneo que mostré arriba.

Casimiro Notevi
09-11-2019, 12:06:38
Más no podemos hacer sin la BD :/

Angel.Matilla
09-11-2019, 12:07:59
Lo sé y os agradezco la ayuda.

Casimiro Notevi
09-11-2019, 12:35:22
Ve paso a paso, primero:
SELECT A.Municipio, A.CodJun, A.CodCom, A.CodPar, ((10 * A.CodPro)+A.Cerrado) CodPro, A.Padron,
A.Censo CenEle, A.Concejales, A.Actualiza, A.Partido_alcalde, A.Nombre_alcalde, A.Sede,
A.CodPres, A.Presidente, A.CodPort, A.Portavoz, A.Constitucion, A.TlfSede, A.Afiliados,
A.RatAfi, A.Observaciones
FROM Dl01 A


y
SELECT A.*
FROM Dl01 A


Si el resultado es igual, por lógica debe serlo, da el siguiente paso:
SELECT A.Municipio, A.CodJun, A.CodCom, A.CodPar, ((10 * A.CodPro)+A.Cerrado) CodPro, A.Padron,
A.Censo CenEle, A.Concejales, A.Actualiza, A.Partido_alcalde, A.Nombre_alcalde, A.Sede,
A.CodPres, A.Presidente, A.CodPort, A.Portavoz, A.Constitucion, A.TlfSede, A.Afiliados,
A.RatAfi, A.Observaciones
FROM Dl01 A
WHERE A.CodPrv = (SELECT i.Literal FROM Instalacion i WHERE i.Etiqueta = 'Provincia')

y
SELECT a.*
FROM Dl01 A
WHERE A.CodPrv = (SELECT i.Literal FROM Instalacion i WHERE i.Etiqueta = 'Provincia')
Que también deben ser iguales, así que ahora el siguiente paso... y así.
Pero, no olvides el alias en todos los campos cuando hay más de una tabla involucrada.

Angel.Matilla
09-11-2019, 12:36:54
Ve paso a paso, primero:
En cuanto pueda haré la prueba y os digo como ha ido.