gpt4 book ai didi

sql - Oracle (+) 常数值运算符

转载 作者:行者123 更新时间:2023-12-02 09:11:36 24 4
gpt4 key购买 nike

考虑下面的 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;

我对他的 (+) 运算符有点困惑。据我所知,(+)OUTER JOIN的快捷方式,根据你把它放在哪一边,它表示LEFT右外连接

但是在上面的查询中,左外连接具有某个常量值,而不是任何其他表 ID。这是什么意思? PostgreSQL 中类似的东西是什么?

也许这个问题可以概括,但我不明白恒定值的含义。

最佳答案

类似于这样的事情:

select *
from t1
left outer join p2 on t1.psn_id = p2.psn_id and p2.pat_att_id = 48;

因此本质上是“过滤外连接”,其中仅连接表行的子集。

如果从 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;

这是不同的。


这是为什么不应再使用 (+) 运算符的另一个好例子(甚至 Oracle 也推荐这样做)。

关于sql - Oracle (+) 常数值运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51394702/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com