根据另一列匹配,从表中插入一列到另一列

时间:2013-09-13 10:58:21

标签: mysql

我一直试图让这个查询正常运行,但它却引发了错误:

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

但该栏目中有值。

2 个答案:

答案 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)