我一直试图让这个查询正常运行,但它却引发了错误:
UPDATE property_image PI
SET PI.property_id = (SELECT PTPI.property_id
FROM property_to_property_image PTPI
WHERE PI.id = PTPI.property_image_id)
它说:
Column 'property_id' cannot be null
但该栏目中有值。
答案 0 :(得分:0)
使用INNER JOIN
子句:
UPDATE property_image PI
INNER JOIN property_to_property_image PTPI
ON PI.id = PTPI.property_image_id)
SET PI.property_id;
答案 1 :(得分:0)
这会失败,因为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)