这失败了,因为 property_image 中的条目在 property_to_property_image 表中没有条目,并且 mysql 尝试将 property_id 更新为 null,这对于该列是不允许的。
问题是,你想要什么。
如果您只想更新具有匹配条目的条目,请使用内部联接。
UPDATE property_image pi
INNER JOIN property_to_property_image ptpi ON pi.id = ptpi.property_image_id
SET pi.property_id = ptpi.property_id
否则你的查询很好,但需要一个COALESCE(value, replacement)
声明。
UPDATE property_image PI
SET PI.property_id = COALESCE(
SELECT PTPI.property_id
FROM property_to_property_image PTPI
WHERE PI.id = PTPI.property_image_id), 0)
但效率不高,因为它会为 property_image 中的每一行进行新的选择。更好:修改 UPDATE 查询以使用左连接
UPDATE property_image pi
LEFT JOIN property_to_property_image ptpi ON pi.id = ptpi.property_image_id
SET pi.property_id = COALESCE(ptpi.property_id, 0)