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

SQL查询不匹配记录求助:两表外连接未获预期结果

解决Table1与Table2的左外连接查询问题

首先,你想要的是以Table1为主表的左外连接,目的是保留Table1中所有的product_source记录,同时关联Table2中对应的item值,当Table2没有匹配的product_id时显示NULL。你的现有语句问题出在连接的方向或者语法使用上,以下是正确的解决方案:

方法1:标准SQL LEFT OUTER JOIN语法(推荐)

这种写法兼容性最好,几乎所有主流数据库都支持:

SELECT 
    t1.product_source,
    t2.item
FROM Table1 t1
LEFT OUTER JOIN Table2 t2 
    ON t1.product_id = t2.product_id;

语法解释:

  • LEFT OUTER JOIN(可简写为LEFT JOIN)会保留左表(这里是Table1 t1)的所有行
  • 当右表(Table2 t2)中找不到与左表product_id匹配的记录时,右表的列(这里是item)会填充为NULL
  • 使用表别名t1、t2可以让语句更简洁易读

方法2:Oracle风格的(+)外连接语法

如果你使用的是Oracle数据库,也可以修正你之前的写法,注意(+)的位置要对应右表的关联字段:

SELECT 
    t1.product_source,
    t2.item
FROM Table1 t1, Table2 t2
WHERE t1.product_id = t2.product_id(+);

这里的(+)放在Table2.product_id后面,表示这是左外连接,即左表的所有行都会被保留,右表匹配不到的字段为NULL。你之前的写法把(+)放在了左表字段上,导致连接方向反了,所以得不到预期结果。

执行结果验证

执行上述任意语句后,都会得到你期望的结果:

product_sourceitem
CRMitem1
CRMitem2
CNTNULL

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:28:10