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

使用SQL合并两张表,仅保留表2存在ID对应全量产品数据

正确SQL实现方案

错误原因说明

你之前仅通过ID字段左连接产生重复数据,是因为同ID下表1和表2各有多条产品记录,仅按ID关联会生成笛卡尔积(比如ID=1表1有3条、表2有2条,仅按ID关联会得到3*2=6条重复数据)。

实现逻辑

满足你的需求需要两步:

  1. 过滤表1,仅保留ID在表2中存在的行(排除ID=2的行)
  2. 用ID + Product code两个字段作为联合关联条件左连表2,匹配Product tenure字段,确保每行表1数据最多匹配1行表2数据,避免重复

具体SQL代码

SELECT 
    t1.ID,
    t1.`Product code`,
    t1.Spend,
    t2.`Product tenure`
FROM table1 t1
-- 第一步:过滤仅保留表1中ID在表2存在的行
WHERE EXISTS (
    SELECT 1 FROM table2 t2_sub
    WHERE t2_sub.ID = t1.ID
)
-- 第二步:双字段关联取Product tenure,无匹配返回空
LEFT JOIN table2 t2
    ON t1.ID = t2.ID 
    AND t1.`Product code` = t2.`Product code`

如果你的数据库场景更适合用子查询取唯一ID的写法,也可以用下面的等价版本:

SELECT 
    t1.ID,
    t1.`Product code`,
    t1.Spend,
    t2.`Product tenure`
FROM table1 t1
INNER JOIN (SELECT DISTINCT ID FROM table2) t2_ids
    ON t1.ID = t2_ids.ID
LEFT JOIN table2 t2
    ON t1.ID = t2.ID 
    AND t1.`Product code` = t2.`Product code`

以上两种写法返回结果完全符合你的预期:包含ID=1的3条数据、ID=3的2条数据,匹配到的Product tenure正常填充,无匹配的字段为空,没有重复数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 00:24:02