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

SQL用另一列值替换NULL并更新数据表的报错解决

错误原因

你的更新语句存在两个核心问题:

  1. UPDATE中的子查询没有和待更新的当前行做关联,会返回多行结果,数据库无法确定给每行赋哪个值,因此触发报错。
  2. 关联条件漏了a.UniqueID <> b.UniqueID,会出现自关联的无效匹配,同时冗余的CASE判断完全不需要,WHERE条件已经筛选出了PropertyAddress为NULL的行,直接赋值即可。

正确写法

适用于MySQL等支持JOIN直接更新的数据库

UPDATE nashvillehousing a
JOIN nashvillehousing b
  ON a.ParcelID = b.ParcelID 
  AND a.UniqueID <> b.UniqueID
SET a.PropertyAddress = b.PropertyAddress
WHERE a.PropertyAddress IS NULL 
  AND b.PropertyAddress IS NOT NULL;

适用于SQL Server的写法

UPDATE a
SET PropertyAddress = b.PropertyAddress
FROM nashvillehousing a
JOIN nashvillehousing b
  ON a.ParcelID = b.ParcelID 
  AND a.UniqueID <> b.UniqueID
WHERE a.PropertyAddress IS NULL 
  AND b.PropertyAddress IS NOT NULL;

注意事项

  • 执行更新前先运行以下查询验证匹配结果是否符合预期,确认无误后再执行更新操作:
SELECT 
  a.ParcelID, a.PropertyAddress 待更新空地址, 
  b.ParcelID, b.PropertyAddress 匹配到的地址
FROM nashvillehousing a
JOIN nashvillehousing b
  ON a.ParcelID = b.ParcelID 
  AND a.UniqueID <> b.UniqueID
WHERE a.PropertyAddress IS NULL 
  AND b.PropertyAddress IS NOT NULL;
  • 建议操作前先备份全表数据,避免误操作导致数据丢失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 01:30:01