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

如何更新Locality-market表实现每个locality_id对应唯一locality_name

问题原因

你原来的SQL是逐行将空的locality_name替换为当前行的market_name,当同一个locality_id对应多条market_name不同的记录时,自然会出现同一个locality_id关联多个locality_name的问题。

实现规则

根据你给出的预期结果,统一更新规则为:同一个locality_id下所有空的locality_name,统一赋值为该locality_id分组内market_id最小的记录对应的market_name,完全匹配你给出的示例效果。

具体SQL写法

MySQL 8.0+

UPDATE `Locality-market` lm
JOIN (
  SELECT 
    Locality_id,
    market_name AS assign_name
  FROM (
    SELECT 
      Locality_id,
      market_name,
      ROW_NUMBER() OVER (PARTITION BY Locality_id ORDER BY market_id ASC) AS rn
    FROM `Locality-market`
  ) t
  WHERE rn = 1
) ref ON lm.Locality_id = ref.Locality_id
SET lm.locality_name = ref.assign_name
WHERE lm.locality_name = '' OR lm.locality_name IS NULL;

MySQL 5.x(不支持窗口函数)

UPDATE `Locality-market` lm
JOIN (
  SELECT 
    t1.Locality_id,
    t1.market_name AS assign_name
  FROM `Locality-market` t1
  JOIN (
    SELECT Locality_id, MIN(market_id) AS min_mid
    FROM `Locality-market`
    GROUP BY Locality_id
  ) t2 ON t1.Locality_id = t2.Locality_id AND t1.market_id = t2.min_mid
) ref ON lm.Locality_id = ref.Locality_id
SET lm.locality_name = ref.assign_name
WHERE lm.locality_name = '' OR lm.locality_name IS NULL;

PostgreSQL

UPDATE "Locality-market" lm
SET locality_name = ref.assign_name
FROM (
  SELECT 
    Locality_id,
    market_name AS assign_name
  FROM (
    SELECT 
      Locality_id,
      market_name,
      ROW_NUMBER() OVER (PARTITION BY Locality_id ORDER BY market_id ASC) AS rn
    FROM "Locality-market"
  ) t
  WHERE rn = 1
) ref
WHERE lm.Locality_id = ref.Locality_id
AND (lm.locality_name = '' OR lm.locality_name IS NULL);

SQL Server

WITH ref AS (
  SELECT 
    Locality_id,
    market_name AS assign_name,
    ROW_NUMBER() OVER (PARTITION BY Locality_id ORDER BY market_id ASC) AS rn
  FROM [Locality-market]
)
UPDATE lm
SET lm.locality_name = r.assign_name
FROM [Locality-market] lm
JOIN ref r ON lm.Locality_id = r.Locality_id AND r.rn = 1
WHERE lm.locality_name = '' OR lm.locality_name IS NULL;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 07:54:08