如何处理错误“模糊列定义”?

时间:2012-07-29 08:16:23

标签: sql oracle

这是我的sql命令:

select INCOME_TYPE_ID,
       REGION_CODE,
       FIN_YEAR_CODE,
       PORTION_AMOUNT
  from INCOME.INCOME_TYPE, 
       COMMON.REGION, 
       INCOME.RECEIVE_DOC_PORTION, 
       INCOME.ASSESS_ORDER_ITEM, 
       ACCOUNTING.VOUCHER_ITEM_RECEIVE_DOC, 
       ACCOUNTING.VOUCHER_ITEM, 
       ACCOUNTING.VOUCHER, 
       ACCOUNTING.FIN_YEAR
 where INCOME.RECEIVE_DOC_PORTION.ASSESS_ORDER_ITEM_ID = INCOME.ASSESS_ORDER_ITEM.ASSESS_ORDER_ITEM_ID
   and INCOME.ASSESS_ORDER_ITEM.INCOME_TYPE_ID=INCOME.INCOME_TYPE.INCOME_TYPE_ID
   and INCOME.RECEIVE_DOC_PORTION.RECEIVE_DOC_PORTION_ID = ACCOUNTING.VOUCHER_ITEM_RECEIVE_DOC.RECEIVE_DOC_PORTION_ID
   and ACCOUNTING.VOUCHER_ITEM_RECEIVE_DOC.VOUCHER_ITEM_ID = ACCOUNTING.VOUCHER_ITEM.VOUCHER_ITEM_ID
   and ACCOUNTING.VOUCHER_ITEM.VOUCHER_ID = ACCOUNTING.VOUCHER.VOUCHER_ID
   and ACCOUNTING.VOUCHER.REGION_CODE = COMMON.REGION.REGION_CODE
   and ACCOUNTING.VOUCHER.FIN_YEAR_CODE = ACCOUNTING.FIN_YEAR.FIN_YEAR_CODE

我收到了这个错误:

  

定义不明确的列

我正在使用SQL Developer作为Oracle客户端。

3 个答案:

答案 0 :(得分:6)

显然,您的选择列表中的一个(或多个)列名称存在于FROM列表的多个表中。

你需要在SELECT列表中的每一列前面加上它来自的表(这也是一个很好的做法,不管它们是否具有模糊性)

答案 1 :(得分:1)

在select查询中的每一列之前提及表的名称。 不明确的列意味着在一个SELECT语句中有多个具有相同名称的列。

答案 2 :(得分:1)

请尝试使用完全限定名称对所有选定列进行预处理(正如您在SELECT中的其他位置所做的那样):

select INCOME.INCOME_TYPE.INCOME_TYPE_ID,
       COMMON.REGION.REGION_CODE,
       ACCOUNTING.FIN_YEAR.FIN_YEAR_CODE,
       ACCOUNTING.VOUCHER_ITEM_RECEIVE_DOC.PORTION_AMOUNT
  from INCOME.INCOME_TYPE, 
       COMMON.REGION, 
       INCOME.RECEIVE_DOC_PORTION, 
       INCOME.ASSESS_ORDER_ITEM, 
       ACCOUNTING.VOUCHER_ITEM_RECEIVE_DOC, 
       ACCOUNTING.VOUCHER_ITEM, 
       ACCOUNTING.VOUCHER, 
       ACCOUNTING.FIN_YEAR
 where INCOME.RECEIVE_DOC_PORTION.ASSESS_ORDER_ITEM_ID = INCOME.ASSESS_ORDER_ITEM.ASSESS_ORDER_ITEM_ID
   and INCOME.ASSESS_ORDER_ITEM.INCOME_TYPE_ID = INCOME.INCOME_TYPE.INCOME_TYPE_ID
   and INCOME.RECEIVE_DOC_PORTION.RECEIVE_DOC_PORTION_ID = ACCOUNTING.VOUCHER_ITEM_RECEIVE_DOC.RECEIVE_DOC_PORTION_ID
   and ACCOUNTING.VOUCHER_ITEM_RECEIVE_DOC.VOUCHER_ITEM_ID = ACCOUNTING.VOUCHER_ITEM.VOUCHER_ITEM_ID
   and ACCOUNTING.VOUCHER_ITEM.VOUCHER_ID = ACCOUNTING.VOUCHER.VOUCHER_ID
   and ACCOUNTING.VOUCHER.REGION_CODE = COMMON.REGION.REGION_CODE
   and ACCOUNTING.VOUCHER.FIN_YEAR_CODE = ACCOUNTING.FIN_YEAR.FIN_YEAR_CODE

我不得不猜测

的电子合格名称
ACCOUNTING.VOUCHER_ITEM_RECEIVE_DOC.PORTION_AMOUNT

可能是

INCOME.RECEIVE_DOC_PORTION.PORTION_AMOUNT

但你应该能够轻松解决这个问题。

希望它有所帮助...