Malditos queries

querySon las 9pm 10pm y sigo en el trabajo, todavía me queda un rato más porque algo me atrasó.

Yo trabajo con PL/SQL de Oracle y el problema era este: una página que ejecutaba un query devuelve un resultado y otra página que ejecuta otro query prácticamente igual pero que devuelve otro resultado.

Eran queries sencillos (a unas cuantas tablas), pero para poner las cosas más interesantes, los queries no eran exactamente iguales (uno devolvía un listado, así que tenía algún GROUP BY por ahí pero los resultados de los dos tenían que tener sentido),, además, uno de ellos era dinámico (así que tuve que “construirlo” al vuelo para probar).

Luego de quitar cosas que no vienen al caso (las columnas devueltas en el SELECT, y los GROUP BY) y armar el query dinámico, estos eran:

Query 1:

SELECT *
  FROM cashdesk.np_payment_concept pc,
       cashdesk.np_payment_order_detail pod,
       cashdesk.np_payment_order po,
       cashdesk.np_payment_document pd,
       cashdesk.np_operation op
 WHERE po.npstatus = '20'
   AND pd.npstatus = '10'
   AND op.npstatus = '10'
   AND op.npoperation = '60'
   AND op.npoperationtype = '10'
   AND po.npcustomerid = 482473
   AND pc.npconceptid = pod.npconceptid
   AND pod.nppaymentorderdetid = po.nppaymentorderid
   AND po.nppaymentorderid = pd.nppaymentorderid
   AND pd.npoperationid = op.npoperationid
   AND op.npoperationid > '3522'
   AND TRUNC(op.npcreateddate) >= TRUNC(SYSDATE)
    AND pc.npconcepttarget = '30'

El segundo query era este:

SELECT *
  FROM cashdesk.np_payment_concept pc,
       cashdesk.np_payment_order_detail pod,
       cashdesk.np_payment_order po,
       cashdesk.np_payment_document pd,
       cashdesk.np_operation op
 WHERE po.npstatus = '20'
   AND pd.npstatus = '10'
   AND op.npstatus = '10'
   AND op.npoperation = '60'
   AND op.npoperationtype = '10'
   AND po.npcustomerid = 482473
   AND pc.npconceptid = pod.npconceptid
   AND pod.nppaymentorderid = po.nppaymentorderid
   AND po.nppaymentorderid = pd.nppaymentorderid
   AND pd.npoperationid = op.npoperationid
   AND op.npoperationid > '3522'
   AND TRUNC(op.npcreateddate) >= TRUNC(SYSDATE)
   AND pc.npconcepttarget = '30'

¿Encuentran por qué es que no devuelven lo mismo? A mi me tomó un buen rato y la ayuda de 3 personas más. Al final tuve que copiarlos en dos archivos de texto y usar uno de esos programa para buscar diferencias.

Linuxfera Enviar a Linuxfera
Entradas Relacionadas:
  • Malditos programas
  • Error 28 en MySQL
  • Código en la vida real y en Hollywood
  • 5 Respuestas a “Malditos queries”


    1. 1 Imzyos

      Sin mirar hacer mucho esfuerzo por qeu ay tengo sueño, me inclino por el espacio antes de AND

    2. 2 Manuel

      Puñetera ‘T’, al final he tenido que coger también un programa que me de las diferencias.

    3. 3 RedWarrior

      joder, eso es heavy metal… jaja :P

    4. 4 Koki

      Bueno, no era el espacio cerca al AND (es un error mio al pegar el query en el post. Además los espacios en blanco de más no son considerados al procesarlo).

      Como bien dice Manuel, el error era este en el primer query:

      AND pod.nppaymentorderdetid = po.nppaymentorderid

      La det está de más. nppaymentorderdetid si es una columna de la tabla (por eso no arroja error) pero no viene al caso para la condición de este query

    5. 5 Lorenzo Chacón

      Si que estaba escondido… =/

    Añade un Comentario