【问题标题】:how to outer-join Tables using ANSI sql [duplicate]如何使用 ANSI sql 外连接表 [重复]
【发布时间】: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 来完成。

感谢任何人提供的任何指导。谢谢!

【问题讨论】:

  • stackoverflow.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 排序;跨度>

标签: sql oracle


【解决方案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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2017-04-08
  • 1970-01-01
  • 2010-11-15
  • 2020-04-26
  • 2019-08-11
  • 2018-07-12
  • 1970-01-01
  • 2019-12-12
相关资源
最近更新 更多