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

如何在SQL中实现产品名称匹配关键词更新品牌字段的操作?

问题背景

现有两张数据表

表1(示例表名:product_info)

product_namebrandsSupplier
xyzAdidas
abcNike

表2(示例表名:brand_mapping)

brandskeysSuppliers
Xx, y,zPuma,Adidas
AaNew Balance

需求

检查表1的product_name是否包含表2的keys字段中的任意子关键词,若匹配成功,则将表2对应的brands值赋值给表1的brands字段。

现有Python实现代码

for index, key in enumerate(keys):
    for sub_index, sub_key in enumerate(key):
        for i, name in enumerate(product_name):
            if sub_key in name:
                 Table1["brands"][i] =  Table1["brands"][index]
问题解答
  1. 该逻辑能否用SQL实现?
    可以,SQL完全支持这种字符串匹配+字段赋值的逻辑,核心是通过字符串匹配函数关联两张表,再用更新语句完成赋值操作。

  2. 是否可以将上述Python脚本转换为SQL语句?
    可以,但需要先处理表2中keys字段的逗号分隔值,将其拆分为单独的子关键词行,再进行匹配更新。以下是主流SQL方言的实现示例:

MySQL 实现

先拆分表2的keys字段为独立行:

-- 创建临时存储拆分后关键词的表
CREATE TEMPORARY TABLE split_keys AS
SELECT 
    b.brands,
    TRIM(SUBSTRING_INDEX(SUBSTRING_INDEX(b.keys, ',', n.n), ',', -1)) AS sub_key
FROM 
    brand_mapping b
CROSS JOIN 
    (SELECT 1 n UNION ALL SELECT 2 UNION ALL SELECT 3) n
WHERE 
    n.n <= LENGTH(b.keys) - LENGTH(REPLACE(b.keys, ',', '')) + 1;

再更新表1的brands字段:

UPDATE product_info p
JOIN split_keys sk ON p.product_name LIKE CONCAT('%', sk.sub_key, '%')
SET p.brands = sk.brands;

PostgreSQL 实现

利用内置函数直接拆分逗号分隔值并更新:

UPDATE product_info p
SET brands = sk.brands
FROM (
    SELECT 
        b.brands,
        TRIM(unnest(string_to_array(b.keys, ','))) AS sub_key
    FROM brand_mapping b
) sk
WHERE p.product_name LIKE CONCAT('%', sk.sub_key, '%');

注意事项

  • 如果同一个product_name匹配到多个子关键词对应的不同brands,SQL会按执行顺序保留最后匹配到的brands值,和原Python循环逻辑一致。
  • 实际使用时请替换示例表名(product_info、brand_mapping)为你的真实表名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 22:57:26