如何使用 ANSI sql 外连接表 [重复]
Posted
技术标签:
【中文标题】如何使用 ANSI sql 外连接表 [重复]【英文标题】:how to outer-join Tables using ANSI sql [duplicate] 【发布时间】:2017-11-15 13:53:30 【问题描述】:我正在处理 2 个表。一个包含 657 行符合我的过滤条件,另一个包含 193 条记录。
我使用 Oracle 的“AFAIK”语法成功加入了他们:
select
ecp.portfolio_acct, ecp.posn_id cost_posn_id, ecp.asset_id
from MID_COST_POSITION ecp, MID_CASH_POSITION cas
where ecp.portfolio_acct = 10183306
and ecp.portfolio_acct = cas.portfolio_acct(+)
and ecp.asset_id = cas.asset_id(+)
;
但是,我似乎无法使用 ANSI-SQL(或 ISO-sql)复制这些结果:
select
ecp.portfolio_acct, ecp.posn_id cost_posn_id, ecp.asset_id
from MID_COST_POSITION ecp
LEFT OUTER JOIN MID_CASH_POSITION cas
on ecp.portfolio_acct = cas.portfolio_acct
where ecp.asset_id = cas.asset_id
and ecp.portfolio_acct = 10183306
;
我尝试了各种 JOIN 都没有成功。在第一个示例中,我必须外连接 2 个单独的字段,我不知道如何使用 ANSI-SQL 来完成。
感谢任何人提供的任何指导。谢谢!
【问题讨论】:
***.com/questions/4001045/… 的链接给了我所需的答案。 “ON”、“AND”和“WHERE”子句的顺序肯定会产生影响。选择 ecp.portfolio_acct、ecp.posn_id cost_posn_id、ecp.asset_id from MID_COST_POSITION ecp LEFT JOIN MID_CASH_POSITION cas on cas.asset_id = ecp.asset_id 和 ecp.portfolio_acct = cas.portfolio_acct 其中ecp.portfolio_acct = 10183306 按1、3 排序;跨度> 【参考方案1】:select
ecp.portfolio_acct, ecp.posn_id cost_posn_id, ecp.asset_id
from MID_COST_POSITION ecp
LEFT OUTER JOIN MID_CASH_POSITION cas
on ecp.portfolio_acct = cas.portfolio_acct
and ecp.asset_id = cas.asset_id
Where ecp.portfolio_acct = 10183306
;
您将其转换为具有以下 where 条件的内部联接,因为它现在必须在结果集中满足该条件:
ecp.asset_id = cas.asset_id
【讨论】:
是的,我现在看到了。过滤条件顺序非常重要! 这有助于解释它:wiki.lessthandot.com/index.php/WHERE_conditions_on_a_LEFT_JOIN以上是关于如何使用 ANSI sql 外连接表 [重复]的主要内容,如果未能解决你的问题,请参考以下文章