[英]Insert one column from a table to another based on another column matching
我一直在尝试使此查询正常工作,但它抛出错误:
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
但是该列中有值。
使用INNER JOIN
子句:
UPDATE property_image PI
INNER JOIN property_to_property_image PTPI
ON PI.id = PTPI.property_image_id)
SET PI.property_id;
失败是因为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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.