【问题标题】:ORA-00918: column ambiguously defined i am getting this errorORA-00918: 列定义不明确我收到此错误
【发布时间】:2015-09-28 04:41:39
【问题描述】:
SELECT
    c.CONSOL_INVOICE,
    cu.name,
    cu.CUST_CODE,
    c.bu_name, 
    cLang.name
FROM CONSL_INV c 
LEFT JOIN customers cu ON c.cust_code = cu.CUST_CODE,
    customers_lang cLang 
WHERE 
    upper(cLang.NAME) LIKE ?  
    AND upper(cLang.LANGUAGE_CD) = ? 
    AND c.CUST_CODE = cLang.CUST_CODE

此查询在 Oracle Sql Developer 中正确执行,但在休眠中不执行。

它给出了以下错误:

“ORA-00918:列定义不明确”

我知道这是因为多个列具有相同的名称,但我已经正确完成了,但仍然不知道为什么它没有在休眠状态下执行。

【问题讨论】:

  • 尝试为列 cu.namecLang.name 添加别名
  • 既然知道是多列同名,为什么不用别名呢?
  • 另外,你真的不应该在查询中混合使用 ANSI 连接和逗号分隔的表。它的可读性较差,更容易出错。

标签: sql oracle hibernate


【解决方案1】:

正如其他人建议的那样使用别名:

select c.consol_invoice
      ,cu.name as name1
      ,cu.cust_code
      ,c.bu_name
      ,clang.name as name2
  from consl_inv c
  left join customers cu
    on c.cust_code = cu.cust_code, customers_lang clang
 where upper(clang.name) like ?
   and upper(clang.language_cd) = ?
   and c.cust_code = clang.cust_code

如您所见,我为选定的列 cu.name 和 clang.name 添加了别名,以便查询结果具有两个不同的列。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-14
    相关资源
    最近更新 更多