Ver Mensaje Individual
  #1  
Antiguo 06-02-2018
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Reputación: 19
Angel.Matilla Va por buen camino
Querys con resultados incoherentes

Estoy tratando de hacer una búsqueda para contra los registros que cumplen una determinada condición. Para probar he limitado la consulta a un único tipo de registro.

Tengo dos querys (ninguno de ellos es sencillo):
Código PHP:
SELECT DISTINCT A.CodigoC.NombreD.LiteralE.Literal
  FROM Persona A
  LEFT JOIN Recibos B ON A
.CodPrv B.CodPrv AND A.Codigo B.Codigo
  LEFT JOIN Instalacion D ON D
.Etiqueta 'Situacion' AND A.Situacion D.Valor
  LEFT JOIN Instalacion E ON E
.Etiqueta 'ForPago' AND A.ForPago E.ValorJunta C
 WHERE A
.Situacion IN (SELECT Valor FROM Instalacion WHERE Etiqueta 'Situacion' AND Situacion 1)
   AND 
A.Cuota 0
   
AND A.ForPago IN (SELECT Valor FROM Instalacion WHERE Etiqueta 'ForPago' AND Literal 'Banco')
   AND 
A.PerPago = (SELECT Valor FROM Instalacion WHERE Etiqueta 'PerPago' AND Literal 'Anual')
   AND 
A.Codigo NOT IN (SELECT Codigo FROM Emision)
   AND 
A.CodPrv C.CodPrv AND A.Junta C.Codigo AND C.Nombre 'CIUDAD REAL'
 
ORDER BY 2,3,4,
Si ejecuto este query me devuelve 55 filas, que es lo que ha de ser. Pero si lo ejecuto así:
Código PHP:
SELECT DISTINCT COUNT(A.Codigo), C.NombreD.LiteralE.Literal
  FROM Persona A
  LEFT JOIN Recibos B ON A
.CodPrv B.CodPrv AND A.Codigo B.Codigo
  LEFT JOIN Instalacion D ON D
.Etiqueta 'Situacion' AND A.Situacion D.Valor
  LEFT JOIN Instalacion E ON E
.Etiqueta 'ForPago' AND A.ForPago E.ValorJunta C
 WHERE A
.Situacion IN (SELECT Valor FROM Instalacion WHERE Etiqueta 'Situacion' AND Situacion 1)
   AND 
A.Cuota 0
   
AND A.ForPago IN (SELECT Valor FROM Instalacion WHERE Etiqueta 'ForPago' AND Literal 'Banco')
   AND 
A.PerPago = (SELECT Valor FROM Instalacion WHERE Etiqueta 'PerPago' AND Literal 'Anual')
   AND 
A.Codigo NOT IN (SELECT Codigo FROM Emision)
   AND 
A.CodPrv C.CodPrv AND A.Junta C.Codigo AND C.Nombre 'CIUDAD REAL'
 
GROUP BY 2,3,4
 ORDER BY 2
,3,
La columna del COUNT me devuelve como resultado 412, que es de todo punto incorrecto.

Entiendo que si las condiciones son las mismas en ambas consultas el resultado debería ser el mismo, es decir que el COUNT me devolviera 55. Ya no sé que hacer para tratar de aislar el error que estoy cometiendo; me interesaría el segundo método, con un COUNT, porque es para mostrar un resultado resumen en pantalla y poder hacer unos procesos después en función de la selección del usuario. Si alguno quiere echarme una mano le puedo pasar la base de datos en FB 2.5; va por delante que el fichero comprimido ocupa más de 320 KB.

Última edición por Angel.Matilla fecha: 06-02-2018 a las 17:43:01.
Responder Con Cita