NET*_*eek 2 sql oracle outer-join
考虑以下Oracle查询:
SELECT psn_id, nvl(psn_name_lang, psn_name_kurz) psn_name, cli_code, cli_id, cli_cmp_id, p2.pat_value cli_domain
FROM tabl_psn_obj, table_cli, table_pat p1, table_pat p2
WHERE psn_id = p1.pat_psn_id
AND p1.pat_value = to_char(cli_cmp_id)
AND p1.pat_att_id = 3
AND p2.pat_att_id(+) = 48 <---- what does this mean
AND p2.pat_psn_id = psn_id
AND p2.pat_value = i_domain
AND cli_cmp_id = i_cmp_id;
Run Code Online (Sandbox Code Playgroud)
我对他的(+)操作员感到困惑.据我所知,这(+)是一个快捷方式OUTER JOIN,取决于你把它放在哪一侧,它表示一个LEFT或RIGHT OUTER JOIN.
但在上面的查询中,左外连接具有一些常量值,而不是任何其他表ID.这是什么意思?PostgreSQL中的类似之处是什么?
也许这个问题可以概括,但我不理解具有恒定值的含义.
它类似于这样的事情:
select *
from t1
left outer join p2 on t1.psn_id = p2.psn_id and p2.pat_att_id = 48;
Run Code Online (Sandbox Code Playgroud)
所以基本上是一个"过滤外连接",其中只有表的一部分行连接在一起.
如果(+)从p2.pat_att_id(+) = 48查询中删除运算符将变为等效于:
select *
from t1
left outer join p2 on t1.psn_id = p2.psn_id
where p2.pat_att_id = 48;
Run Code Online (Sandbox Code Playgroud)
哪个是不同的.
这是另一个很好的例子,为什么(+)不再使用运算符(甚至Oracle推荐).
| 归档时间: |
|
| 查看次数: |
340 次 |
| 最近记录: |