2015-09-28 92 views
-1
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中正確執行,但它不會在hibernate中執行。ORA-00918:列模糊定義我得到這個錯誤

它提供了以下錯誤:

"ORA-00918: column ambiguously defined"

我知道這是因爲有多個同名的列,但我已經做得正確,但仍然不知道爲什麼它不處於休眠執行。

+0

嘗試爲colums'cu.name'和'cLang.name'添加別名 – HAYMbl4

+0

因爲您知道這是因爲多個列共享相同的名稱,所以爲什麼不使用別名? – fpietka

+0

此外,您真的不應該在查詢中混合使用ANSI連接和逗號分隔表。它不太可讀,並且更容易出錯。 – fpietka

回答

0

由於其他人則建議使用別名:

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以便查詢結果有兩個不同的列。