我有一个表1,其中包含许多实体,另一个表(表2)具有2列:表1的主键和第二列。表1中的一个实体还有其他一些实体(也来自表1),由表2的第二列分配
例:


 id | type | ownerId
1 | bigObject | 1
2 | littleObj | 3
3 | littleObj | 3

id | key
1 | 2
1 | 3


我想将所有littleObjects的ownerId更新为大对象的ownerId。

我试过的

UPDATE entity
SET ownerid = (SELECT ownerid
                 FROM entity
                 WHERE id = 1)
WHERE id IN (SELECT key
                FROM table_b
                WHERE id = 1)
;


但是它说您不能在FROM子句中指定目标表“实体”进行更新

最佳答案

您必须使用MySQL,因为这会产生错误。请改用以下形式:

UPDATE entity e CROSS JOIN
       (SELECT ownerid
        FROM entity
        WHERE id = 1
       ) e1
    SET e.ownerid = e1.ownerid
WHERE id IN (SELECT key
             FROM table_b
             WHERE id = 1)

09-07 23:06