当前位置:  开发笔记 > 数据库 > 正文

在Oracle ANSI join中混合使用"USING"和"ON"

如何解决《在OracleANSIjoin中混合使用"USING"和"ON"》经验,为你挑选了2个好方法。

我写了一个像这样的Oracle SQL表达式:

SELECT
...
FROM mc_current_view a
JOIN account_master am USING (account_no)
JOIN account_master am_loan ON (am.account_no = am_loan.parent_account_no)
JOIN ml_client_account mca USING (account_no)

当我尝试运行它时,Oracle在"ON"自连接行中抛出一个错误:"ORA-25154:USING子句的列部分不能有限定符".

如果我省略"am"限定符,它会说:"ORA-00918:列模糊定义".

解决这个问题的最佳方法是什么?



1> DCookie..:

错误信息实际上是(惊喜!)告诉你究竟是什么问题.对特定列使用USING子句后,不能在查询的任何其他部分中为该列名使用列限定符/表别名.解决此问题的唯一方法是不在查询中的任何位置使用USING子句,因为您必须在第二个连接条件上使用限定符:

SELECT
...
FROM mc_current_view a
JOIN account_master am ON (a.account_no = am.account_no)
JOIN account_master am_loan ON (am.account_no = am_loan.parent_account_no)
JOIN ml_client_account mca ON (a.account_no = mca.account_no);



2> Nick Pierpoi..:

我的偏好是永远不要使用USING ; 总是使用ON.我喜欢我的SQL非常明确,而且USING子句在我看来感觉有一步被删除了.

在这种情况下,错误来了约,因为你account_nomc_current_view,account_masterml_client_account因此实际的连接无法得到解决.希望这可以帮助.

推荐阅读
Life一切安好
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有