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

如何用SQL实现两表关联,将table1未出现的seq_number映射至tp_no=0?

正确SQL实现方案

问题分析

你原SQL的核心问题:

  • 用INNER JOIN会过滤掉不匹配的记录,没法保留table_1里需要的所有目标sequence_number
  • 关联条件tar.tp_no <> brd.sequence_number逻辑错误,应该判断table_1的sequence_number在同c_Id的table_2中没有对应的tp_no
  • 仅筛选tar.tp_no = '0'但关联逻辑不对,导致结果完全不符合预期

实现思路

  1. 先从table_1里挑出对应c_Id下,没在table_2的tp_no中出现过的sequence_number
  2. 把这些记录和table_2里tp_no = '0'的同c_Id记录关联
  3. 用CREATE TABLE或CREATE VIEW把结果存成可复用的表

正确SQL语句

方法1:创建物理持久化表

如果需要固定数据,不随原表更新变化,用这个:

CREATE TABLE merged_result AS
SELECT 
    t1.c_Id,
    t1.Toucpoint,
    t1.sequence_number,
    t2.tot_Id,
    t2.tp_no
FROM table_1 t1
JOIN table_2 t2 
    ON t1.c_Id = t2.c_Id 
    AND t2.tp_no = '0'
WHERE NOT EXISTS (
    SELECT 1 
    FROM table_2 t2_sub
    WHERE t2_sub.c_Id = t1.c_Id 
      AND t2_sub.tp_no = t1.sequence_number
);

方法2:创建实时视图

如果需要结果随原表数据自动同步,建议创建视图:

CREATE VIEW merged_result_view AS
SELECT 
    t1.c_Id,
    t1.Toucpoint,
    t1.sequence_number,
    t2.tot_Id,
    t2.tp_no
FROM table_1 t1
JOIN table_2 t2 
    ON t1.c_Id = t2.c_Id 
    AND t2.tp_no = '0'
WHERE NOT EXISTS (
    SELECT 1 
    FROM table_2 t2_sub
    WHERE t2_sub.c_Id = t1.c_Id 
      AND t2_sub.tp_no = t1.sequence_number
);

语句说明

  • NOT EXISTS子句:精准筛选table_1中,同c_Id下未在table_2的tp_no里出现过的sequence_number,这正是你要的核心数据
  • 关联table_2时直接指定t2.tp_no = '0',一步匹配到需要映射的目标记录
  • 物理表是独立存储数据,查询更快但不会同步原表变更;视图是虚拟表,每次查询都从原表取数,适合需要实时同步的场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 04:25:11