我正在尝试更新表格,但它给了我以下错误:
UPDATE/MERGE 必须与每个目标行至多匹配一个源行。
我应该使用此查询更新 housing_1,但更新函数必须链接到数据集。
UPDATE
my-project-19297-401423.housing_analysis.housing_data
SET
PropertyAddress = ifnull(housing_1.PropertyAddress,housing_2.PropertyAddress)
FROM
my-project-19297-401423.housing_analysis.housing_data AS housing_1
JOIN
my-project-19297-401423.housing_analysis.housing_data AS housing_2
ON
housing_1.ParcelID = housing_2.ParcelID
AND
housing_1.UniqueID_ <> housing_2.UniqueID_
WHERE
housing_1.PropertyAddress is null;
问题不在于连接,而在于查询为每个更新的数据集返回多个结果。请给原始表(将要更新)命名。
首先,生成一个虚拟表作为最小工作示例。
Test
是一个数据集。
CREATE OR REPLACE TABLE Test.housing AS
SELECT
addr||tmp AS PropertyAddress,
ParcelID,
rand() UniqueID_
FROM UNNEST(SPLIT("A B C D E F G H"," ")) AS addr WITH OFFSET ParcelID,
UNNEST(["",NULL]) AS tmp
然后我们使用
group by
从任何 ParcelID 中获取最佳地址,并且每个条目只有一行。在 WHERE
子句中,两个表的 ParcelID
必须匹配。当然,只更新缺失的条目:
org_table.PropertyAddress IS NULL
UPDATE
Test.housing AS org_table
SET
PropertyAddress = IFNULL(org_table.PropertyAddress,PropertyAddress_best_guess)
FROM (
SELECT
ParcelID,
ANY_VALUE(PropertyAddress) AS PropertyAddress_best_guess
FROM
Test.housing
GROUP BY
ParcelID ) AS ref_tbl
WHERE
org_table.PropertyAddress IS NULL
AND org_table.ParcelID = ref_tbl.ParcelID