ORA-00918:列定义不明确:如何查找列



我收到经典错误:

ORA-00918:列定义不明确

通常,我知道如何解决它,但现在的问题是我正在使用 700 行查询。

有没有办法识别列?

你试过做二叉搜索吗?

例如

如果原始查询如下所示

Select  col1 
       ,col2
       ,col3
       ,col4
from MyTable
  1. 你可以从评论下半部分开始
Select  col1
       ,col2
       /*,col3
       ,col4 */
from MyTable
  1. 如果仍然收到错误,请再次运行查询,注释另一半中的某些列:
Select col1
       /*,col2 */
      ,col3
      ,col4
from MyTable

如果仍然收到错误,则问题出在col1,否则您需要更改col2

不明确的列错误消息表示您已联接查询中的两个(或多个)列,这些列共享相同的列名。

解决此问题的正确方法是为查询中的每个表提供一个别名,然后在所有列引用前面加上适当的别名。 我同意对于这么大的查询来说,这并不好玩,但恐怕你将不得不为前任的松懈付出代价。

在 Oracle 中,您可以使用 all_tab_cols 查询表的列名。以下查询将返回 TABLE1 和 TABLE2 之间的公共列名。然后,您只需为这些公共列添加前缀,而不是所有 100 列引用。

select column_name from all_tab_cols
where table_name='TABLE1' and owner ='OWNER1' 
and column_name in (
select column_name from all_tab_cols
where table_name='TABLE2' and owner ='OWNER2')  
您可以使用

以下命令检查公共列:

 select COLUMN_NAME from ALL_TAB_COLS where TABLE_NAME = 'tablenamefirst'
intersect
select COLUMN_NAME from ALL_TAB_COLS where TABLE_NAME = 'tablenamesecond';

为了后代:当我选择TABLE1列时,我遇到了这个问题。DES 和表 2.查询中的 DES,而不为结果设置别名。 当我单独运行它时,我的SQL编辑器将它们转换为DES和DES_1,没有任何抱怨。

但是当我将相同的查询转换为子查询时

SELECT a.col1, a.col2, a.col3, b.*
from TABLE3 a
INNER JOIN (
--that query as a subquery
) b
on a.PK=b.FK`

它抛出了您描述的相同的ORA-00918错误消息。 将我的子查询中的 SELECT 更改为

SELECT TABLE1.DES AS T1_DES, TABLE2.DES AS T2_DES ...

修复了该问题。

相关内容

  • 没有找到相关文章

最新更新