Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 无法确定“列定义不明确”错误的原因_Sql_Oracle - Fatal编程技术网

Sql 无法确定“列定义不明确”错误的原因

Sql 无法确定“列定义不明确”错误的原因,sql,oracle,Sql,Oracle,以下是SQL: 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,

以下是SQL:

    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;

每个列都定义了它的表。alloc表之后的主内部联接在自己运行时运行良好。你知道为什么这不起作用吗?这是针对Oracle 10.2.0.4数据库执行的。我还针对11.2.0.1数据库进行了尝试,认为如果这是Oracle错误,它将在11.2中解决,但也失败了。

语句中重复的字段可能与此有关

h.from_interest_type_cd, h.from_interest_type_cd,

您似乎选择了很多您并不真正需要的列,因为您没有在任何地方使用它们。查询可能简化为:

  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;

+我的眼睛很好。正如中所指出的,我认为这个专栏甚至不需要被选中。感谢你们两位。成功了。两种解决方案都可以解决这个问题。@Nik:除了纠正错误外,消除不需要的列也可以提高查询性能。