You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle SQL如何合并两表并保留全部匹配与不匹配记录

问题原因

你当前的SQL使用逗号分隔两张表、再加等值WHERE条件的写法,本质是内连接,仅会保留两张表type_s字段完全匹配的记录。表1中roadside类型在表2没有对应数据,因此查询结果中该条记录被过滤。

修改方案
  • 将内连接替换为左外连接,以处理后的表1数据(DD子查询)作为左表,完整保留表1的所有记录
  • 使用Oracle内置NVL()函数,将左外连接产生的CNT空值替换为0
  • 若业务逻辑需要按日期+类型双维度关联,可在关联条件中补充日期匹配规则,避免跨日期数据错误关联
调整后的完整代码
with t2 as
(select DATE_TIME , type_s, calls, declines
 from table_1
 ),
CD as
(
SELECT 
DATE_TIME, type_s, CNT
FROM table2
),
DD AS(
SELECT TO_DATE(current_date - 1) AS chart_date,
type_s,
calls,
declines
FROM t2),
GG As
(
SELECT 
DD.chart_date ,
DD.type_s,
DD.calls,
DD.declines,
NVL(CD.CNT, 0) AS CNT
FROM DD
LEFT JOIN CD 
ON CD.type_s = DD.type_s
-- 如需按日期匹配,可取消下一行注释
-- AND CD.DATE_TIME = DD.chart_date
)
select CHART_DATE,type_s,calls,declines,cnt
from GG;

内容的提问来源于stack exchange,提问作者mali_the

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 06:18:05