#1093 - 您无法在FROM子句中为更新指定目标表'预订'

时间:2013-12-03 05:01:24

标签: mysql sql

INSERT INTO bookings 
            (book_id, 
             member_id, 
             expire_date) 
VALUES      (1, 
             3, 
             (SELECT Max(expire_date) 
              FROM   bookings 
              WHERE  member_id = 1) 
             + 5) 

它不会让我第二次使用预订,geez!

2 个答案:

答案 0 :(得分:1)

@Aniket解释了错误的含义。谢谢Aniket。

您的查询可以像这样转换:

INSERT INTO bookings
    (book_id, member_id, expire_date) 
SELECT
    1,3, MAX(expire_date) + INTERVAL 5 DAY
FROM bookings
WHERE member_id=1

答案 1 :(得分:0)

来自MySQL文档subquery-errors

  

在以下情况下会出现此错误,会尝试修改表并从子查询中的同一个表中进行选择

INSERT INTO bookings (book_id, member_id, expire_date) 
VALUES (1,3,(SELECT MAX(expire_date) FROM bookings WHERE member_id=1)+5)
                                            ↑

您可以在UPDATE statement中使用子查询进行分配,因为子查询在UPDATE和DELETE statements以及SELECT statements中都是合法的。

但是,对于子查询FROM子句和更新目标,您不能使用相同的表(在本例中为表bookings)。