簡體   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