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

lf5gs5x2  于 2022-10-04  发布在  Oracle
关注(0)|答案(3)|浏览(126)

我有两个数据相似的表,我需要查询表的联合。我更改了我正在使用的实际表名,只是为了说明这个问题:

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:列定义不明确

由于PKG_ID上的INNER JOIN而出错。

我的实际查询在订单项上还有几个连接,最初我只使用第一个表,例如ORDER,它工作得很好。

有没有办法在Query中定义这种表的联合,这样它就不会有歧义?

sdnqo3pr

sdnqo3pr1#

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

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;
lnxxn5zx

lnxxn5zx2#

我对这些数据进行了进一步的试验,发现是一些特定的列导致了这个问题。

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

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

6yjfywim

6yjfywim3#

这在这里并不重要,但对于任何有相同错误并且已经验证了上面的场景并没有问题的人来说,可能是因为从同一个表中选择了两次列。

相关问题