使用UNION ALL模糊定义的Oracle SQL列

时间:2015-12-21 14:38:48

标签: sql oracle union ambiguous

我有两个具有相似数据的表,我需要查询表的并集。我已经改变了我用来表示问题的实际表名:

SELECT
    UORD.ORDER_NUM
FROM
    (SELECT ORDER_ID, ORDER_NUM, PKG_ID
     FROM ORDER
    UNION ALL
    SELECT ORDER_ID, ORDER_NUM, PKG_ID
     FROM AMENDING_ORDER) UORD
    INNER JOIN PLAN ON PLAN.PKG_ID = UORD.PKG_ID;

我得到了

  

ORA-00918:列模糊定义

由于INNER JOIN上的PKG_ID导致

错误。

我的实际查询在订单商品上有多个连接,最初我只使用第一个表开始,例如ORDER,效果很好。

是否有任何方法可以在查询中定义这种表联合,这样就不会有歧义?

2 个答案:

答案 0 :(得分:0)

您可以尝试使用表名(别名)为列名添加前缀以更明确:

SELECT
    UORD.ORDER_NUM
FROM
    (SELECT O.ORDER_ID, O.ORDER_NUM, O.PKG_ID
     FROM ORDER O
    UNION ALL
    SELECT AO.ORDER_ID, AO.ORDER_NUM, AO.PKG_ID
     FROM AMENDING_ORDER AO) UORD
    INNER JOIN PLAN ON PLAN.PKG_ID = UORD.PKG_ID;

答案 1 :(得分:0)

我已经对数据进行了进一步的实验,并且是导致问题的一些特定列。

表中的数据类型都是相同的,但DBA允许相同的列在一个表中是NULLABLE而不是另一个。

我要求他改变这一点,因为我几乎可以肯定这是错误的,我认为这将解决问题。