如何关联Oracle两张表product1、product2获取带差值的全量查询结果
解决方案
你需要使用Oracle的**全外连接(FULL OUTER JOIN)**实现需求,该连接方式会保留两张表中所有匹配、不匹配的行,刚好覆盖两张表出现过的所有产品记录。
可直接运行的SQL代码
SELECT NVL(t1.product, t2.product) AS product, t1.value AS value_t1, t2.value AS value_t2, -- 计算差值并按照要求格式化结果 CASE WHEN NVL(t2.value, 0) - NVL(t1.value, 0) < 0 THEN '(' || ABS(NVL(t2.value, 0) - NVL(t1.value, 0)) || ')' ELSE TO_CHAR(NVL(t2.value, 0) - NVL(t1.value, 0)) END AS diff FROM product1 t1 FULL OUTER JOIN product2 t2 ON t1.product = t2.product ORDER BY product;
逻辑说明
- 用
FULL OUTER JOIN关联两张表,关联条件为product字段相等,确保所有产品都出现在结果中 NVL(t1.product, t2.product)用来取非空的产品名,避免关联不上时产品名称为空value_t1直接取product1的value字段,关联不上时自动为空,value_t2取值逻辑同理- 计算差值时把空值默认转为0再运算,负数按预期格式用括号包裹,非负数直接输出结果
内容的提问来源于stack exchange,提问作者Rajnish Kumar
相关产品推荐
相关产品推荐

