1

我一直试图让这个查询工作,但它抛出了一个错误:

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

但是该列中有值。

4

2 回答 2

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;
于 2013-09-13T11:01:26.037 回答
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)
于 2013-09-13T11:01:34.943 回答