[英]Insert one column from a table to another based on another column matching
I've been trying to get this query working but it's throwing an error: 我一直在尝试使此查询正常工作,但它抛出错误:
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)
It's saying: 这是说:
Column 'property_id' cannot be null
But there are values in that column. 但是该列中有值。
Use INNER JOIN
clause : 使用
INNER JOIN
子句:
UPDATE property_image PI
INNER JOIN property_to_property_image PTPI
ON PI.id = PTPI.property_image_id)
SET PI.property_id;
This fails because there are entries in property_image that don't have an entry in property_to_property_image table and mysql tries to update property_id to null, which is not allowed for that column. 失败是因为property_image中的条目在property_to_property_image表中没有条目,并且mysql尝试将property_id更新为null,这对于该列是不允许的。
The question is, what do you want. 问题是,你想要什么。
If you want to only update entries where you have an matching entry use inner join. 如果只想更新具有匹配条目的条目,请使用内部联接。
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
Otherwise your query is fine, but needs a COALESCE(value, replacement)
statement. 否则,您的查询就可以了,但是需要一个
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)
but is not very efficient, because it will make a new select for every row in property_image. 但效率不高,因为它将对property_image中的每一行进行新选择。 Better: Modify the UPDATE query to use a left join
更好:修改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.