繁体   English   中英

根据另一列匹配将表中的一列插入到另一列

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM