我如何使用联接执行MySql Update查询

时间:2019-08-14 15:51:05

标签: mysql

我有一个查询,其中列出了所有预订,其状态为90天以后的提醒电子邮件

我想要一个将状态1更改为0的更新查询 我从没有运气的更新查询开始

这是给我我要更新的列表的查询

SELECT * 
  FROM ts_booking_bookings b
  JOIN ts_booking_bookings_slots s 
    ON b.id = s.booking_id 
 WHERE b.reminder_email = 1
   AND s.booking_date > NOW() 
   AND s.booking_date < DATE_ADD(NOW(), INTERVAL 90 DAY);

这是我的UPDATE查询,给我一个错误

UPDATE ts_booking_bookings b
   set reminder_email = 0 
where id in (
SELECT b.id 
  FROM ts_booking_bookings b
  JOIN ts_booking_bookings_slots s
    ON b.id = s.booking_id
 WHERE b.reminder_email = 
   AND s.booking_date > NOW() 
   AND s.booking_date < DATE_ADD(NOW(), INTERVAL 90 DAY))

错误

1093-您无法在FROM子句中指定要更新的目标表“ ts_booking_bookings”

1 个答案:

答案 0 :(得分:1)

您只需要对当前的工作联接选择语法进行一些修改:

UPDATE ts_booking_bookings tsb
INNER JOIN ts_booking_bookings_slots tsbs
    ON tsb.id = tsbs.booking_id
SET
    tsb.reminder_email = 0
WHERE
    tsb.reminder_email = 1 AND
    tsbs.booking_date > NOW() AND
    tsbs.booking_date < DATE_ADD(NOW(), INTERVAL 90 DAY);