gpt4 book ai didi

sql - 将使用加号 (+) 的 Oracle 连接语法转换为标准连接语法

转载 作者:行者123 更新时间:2023-12-04 00:43:57 28 4
gpt4 key购买 nike

我想了解使用 (+) 连接两个表的 Oracle 连接语法。有人可以告诉我,如果将此查询转换为使用标准连接语法,它会是什么样子?

select p1.product_id, p1.product_name, p2.product_code, (decode(p3.product_type, null, 'N/A',p3.product_type) as product_type
from products p1, product_descriptions p2, product_descriptions p3
where p1.product_id=p2.product_id
and p2.product_age=p3.product_age(+)
and p2.product_type=p3.product_type(+)
and p3.status(+)='VALID'

最佳答案

像这样:

select p1.product_id, p1.product_name, p2.product_code,
(decode(p3.product_type, null, 'N/A', p3.product_type) as product_type
from products p1
join product_descriptions p2
on p1.product_id = p2.product_id
left join product_descriptions p3
on p3.product_age = p2.product_age
and p3.product_type = p2.product_type
and p3.status = 'VALID';

where p1.product_id=p2.product_idp1p2 之间的正常内部连接。其他的是外连接;它的编写方式看起来像是左右外连接的混合,但由于 and p2.product_age=p3.product_age(+)and p3.product_age(+)= p2.product_age 那么它不是真的;这是 p1/p2 join 和 p3 的乘积之间相当简单的左外连接。

顺便说一句,我不喜欢像 p1p2p3 这样的别名,因为它们不是描述性的,而且它是在更复杂的查询中执行此操作时很容易迷路。 I'm not alone .

我不确定您是否需要外连接,但这取决于数据。如果 product_ageproduct_type 是唯一的,那么您可以case p2.status;如果不是,那么您可能假设只有一个 product_age/product_type 行可以是 VALID,否则您会得到重复项。只是想着你想做什么......

关于sql - 将使用加号 (+) 的 Oracle 连接语法转换为标准连接语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14610090/

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