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

BigQuery中如何用同ParcelID行值更新空PropertyAddress并解决匹配错误

问题解决:填充空PropertyAddress字段

错误原因

你遇到的UPDATE/MERGE must match at most one source row for each target row错误,是因为待更新的行(t1)通过JOIN匹配到了多个同ParcelID的t2行,数据库无法确定使用哪一个t2的地址值进行填充。

解决方案

方法1:使用聚合函数获取唯一有效地址

利用同一个ParcelID下的非空地址应该一致的特性,用聚合函数(MAX/MIN)确保每个目标行只匹配一个源地址:

UPDATE portfolioproj2.nashvillehousing.realhousingdata AS t1
SET PropertyAddress = (
    SELECT MAX(t2.PropertyAddress)
    FROM portfolioproj2.nashvillehousing.realhousingdata AS t2
    WHERE t2.ParcelID = t1.ParcelID
      AND t2.PropertyAddress IS NOT NULL
)
WHERE t1.PropertyAddress IS NULL;

方法2:使用窗口函数预筛选有效地址

先通过窗口函数为每个ParcelID提取第一个非空地址,再关联更新:

WITH AddressLookup AS (
    SELECT 
        ParcelID,
        FIRST_VALUE(PropertyAddress) OVER (
            PARTITION BY ParcelID 
            ORDER BY CASE WHEN PropertyAddress IS NOT NULL THEN 0 ELSE 1 END
        ) AS ValidAddress
    FROM portfolioproj2.nashvillehousing.realhousingdata
)
UPDATE portfolioproj2.nashvillehousing.realhousingdata AS t1
SET PropertyAddress = al.ValidAddress
FROM AddressLookup AS al
WHERE t1.ParcelID = al.ParcelID
  AND t1.PropertyAddress IS NULL;

原代码问题说明

原代码中,t1.UniqueID_ <> t2.UniqueID_的条件会让每个空地址行匹配所有同ParcelID的其他行,若同ParcelID存在多个非空地址行,就会形成多对一的匹配关系,触发数据库的行匹配限制错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 20:55:22