Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-11-2019
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Resultado distinto de un query

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í:
Código SQL [-]
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

Pero si ejecuto el query así:
Código SQL [-]
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:

y no entiendo el por qué del distinto comportamiento el query.
Responder Con Cita
  #2  
Antiguo 08-11-2019
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.039
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Pon alias para cada tabla y campo. Esos selects pueden dar resultados impredecibles, como es tu caso.
Código SQL [-]
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)
Responder Con Cita
  #3  
Antiguo 08-11-2019
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
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.

Última edición por Angel.Matilla fecha: 08-11-2019 a las 19:16:31.
Responder Con Cita
  #4  
Antiguo 08-11-2019
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.039
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Me refiero tanto al primero como al segundo.
Responder Con Cita
  #5  
Antiguo 09-11-2019
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.556
Poder: 25
egostar Va camino a la fama
Hola

Que valor tiene A.CodPro?

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

Saludos
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #6  
Antiguo 09-11-2019
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Cita:
Empezado por egostar Ver Mensaje
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.
Responder Con Cita
  #7  
Antiguo 09-11-2019
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
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.
Responder Con Cita
  #8  
Antiguo 09-11-2019
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.039
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Más no podemos hacer sin la BD :/
Responder Con Cita
  #9  
Antiguo 09-11-2019
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Lo sé y os agradezco la ayuda.
Responder Con Cita
  #10  
Antiguo 09-11-2019
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.039
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Ve paso a paso, primero:
Código SQL [-]
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
Código SQL [-]
SELECT A.* 
FROM Dl01 A


Si el resultado es igual, por lógica debe serlo, da el siguiente paso:
Código SQL [-]
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
Código SQL [-]
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.
Responder Con Cita
  #11  
Antiguo 09-11-2019
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Ve paso a paso, primero:
En cuanto pueda haré la prueba y os digo como ha ido.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Recorrer resultado de query. darkone2k4 Conexión con bases de datos 5 12-10-2011 19:45:02
Query no sustrae en el resultado Paulao Varios 1 02-04-2008 14:21:34
Resultado de un query en un QRDBLabel Yun-i Varios 6 05-03-2008 19:24:28
Resultado de un query en Delphi MRang14 SQL 3 18-11-2004 00:49:57
Usar el resultado de un Query ramonibk MS SQL Server 3 02-09-2004 13:54:00


La franja horaria es GMT +2. Ahora son las 20:50:38.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi