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

如何使用LIKE匹配字段关联源表更新目标表数据

修正SQL匹配逻辑,实现表数据更新

表结构与数据

tblSource

IDInfoBornCity
11954 Barry Nelson TV seriesUSSan Francisco
21954 Sean Connery Dr. NoUKEdinburgh
31967 David Niven Casino RoyaleUKLondon
41967 George Lazenby On Her Majesty´s Secret ServiceAUNew South Wales
51969 Roger Moore MoonrakerUKLondon
61973 Timothy Dalton The Living DaylightsUKWales
71987 Pierce Brosnan The World Is Not EnoughIECounty Louth

tblTarget(更新前)

IDNameBornCity
10Sean Connery
11Roger Moore
12Timothy Dalton
13Pierce Brosnan
14Daniel Craig

需求说明

通过LIKE匹配关联行,将tblSource中的Born和City字段值更新到tblTarget对应列;无匹配的行不执行更新。需提供两种实现方案:

  • 基于tblTarget生成硬编码列表的方案
  • 全动态关联的方案

预期更新后的tblTarget数据:

IDNameBornCity
10Sean ConneryUKEdinburgh
11Roger MooreUKLondon
12Timothy DaltonUKWales
13Pierce BrosnanIECounty Louth
14Daniel Craig

原错误SQL

UPDATE t
SET t.Born = s.Born,
    t.City = s.City
FROM tblTarget t
JOIN tblSource s
ON t.Name LIKE s.Info
WHERE s.Info IN 
('%Sean Connery%',
 '%Roger Moore%',
 '%Timothy Dalton%',
 '%Pierce Brosnan%',
 '%Daniel Craig%')

修正后的方案

1. 硬编码列表方案

原SQL核心错误是LIKE匹配方向颠倒,且IN条件误用通配符。修正后:

UPDATE t
SET t.Born = s.Born,
    t.City = s.City
FROM tblTarget t
JOIN tblSource s
ON s.Info LIKE '%' + t.Name + '%'
WHERE t.Name IN ('Sean Connery', 'Roger Moore', 'Timothy Dalton', 'Pierce Brosnan')
  • ON子句实现tblSource.Info包含tblTarget.Name的匹配逻辑
  • WHERE子句过滤出需要更新的目标姓名,减少无效关联

2. 全动态方案

无需硬编码,自动匹配所有存在对应记录的行:

UPDATE t
SET t.Born = s.Born,
    t.City = s.City
FROM tblTarget t
JOIN tblSource s
ON s.Info LIKE '%' + t.Name + '%'

该方案会自动匹配所有tblTarget.Name在tblSource.Info中出现的行,无匹配的行(如Daniel Craig)不会被更新,完全符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 17:37:25