2010-11-24 19 views
6

Aquí es el SQL:no puede identificar razón de "la columna ambiguamente definido" error

SELECT alloc.oa_id 
    FROM qdod.qtran_owner_allocation alloc 
     INNER JOIN 
      (SELECT h.oa_id, h.div_ord_no, h.process_queue_id, h.from_ba_no, 
        h.from_ba_suf, h.from_interest_type_cd, h.from_interest_type_cd, h.from_div_ord_grp, 
        h.transfer_percent, h2.original_net_amount, h2.new_net_amount 
      FROM qdod.qtran_fund_transfer_hist h 
        INNER JOIN 
        (SELECT DISTINCT h0.oa_id, h0.original_net_amount, h1.new_net_amount 
         FROM qdod.qtran_fund_transfer_hist h0 
          INNER JOIN 
           (SELECT h4.oa_id, SUM (h4.new_net_amount) AS new_net_amount 
            FROM qdod.qtran_fund_transfer_hist h4 
           GROUP BY h4.oa_id) h1 
          ON h0.oa_id = h1.oa_id 
         WHERE h0.original_net_amount <> h1.new_net_amount AND h0.oa_id >= 100000000) h2 
        ON h.oa_id = h2.oa_id) h3 
     ON alloc.oa_id = h3.oa_id; 

Cada columna tiene su tabla definida. La combinación interna principal (la que está después de la tabla de alloc) funciona bien cuando se ejecuta por sí mismo. ¿Alguna idea de por qué esto no está funcionando? Esto se está ejecutando en una base de datos Oracle 10.2.0.4 (también lo he intentado con una base de datos 11.2.0.1 pensando que si se trataba de un error de Oracle, se resolvería en 11.2, pero también falló allí).

Respuesta

5

campo duplicado en la declaración, podría tener algo que ver con ello

h.from_interest_type_cd, h.from_interest_type_cd, 
+0

+1 Good eye. Como se señala en [mi respuesta] (http://stackoverflow.com/questions/4268140/cant-idenfity-reason-for-column-ambiguously-defined-error/4268305#4268305), no creo que esta columna, incluso necesita ser seleccionado –

2

Usted parece ser la selección de una gran cantidad de columnas que realmente no necesita ya que no se está utilizando en cualquier lugar. La consulta probablemente podría simplificarse a:

SELECT alloc.oa_id 
    FROM qdod.qtran_owner_allocation alloc 
     INNER JOIN 
      (SELECT h.oa_id 
      FROM qdod.qtran_fund_transfer_hist h 
        INNER JOIN 
        (SELECT DISTINCT h0.oa_id 
         FROM qdod.qtran_fund_transfer_hist h0 
          INNER JOIN 
           (SELECT h4.oa_id, SUM (h4.new_net_amount) AS new_net_amount 
            FROM qdod.qtran_fund_transfer_hist h4 
           GROUP BY h4.oa_id) h1 
          ON h0.oa_id = h1.oa_id 
         WHERE h0.original_net_amount <> h1.new_net_amount AND h0.oa_id >= 100000000) h2 
        ON h.oa_id = h2.oa_id) h3 
     ON alloc.oa_id = h3.oa_id; 
+0

Gracias a ambos. Eso lo hizo. Ambas soluciones lo habrían resuelto. – Nik

+0

@Nik: además de corregir el error, la eliminación de las columnas innecesarias debería mejorar el rendimiento de la consulta. –

Cuestiones relacionadas