Update полей в разных таблицах в одном запросе

Есть 2 связанных таблицы:

CREATE TABLE rooms
(
    id          INT NOT NULL AUTO_INCREMENT,
    room_status INT NOT NULL,
    room_price  INT,
    delete_time DATE,
    PRIMARY KEY (id)
);

CREATE TABLE bookings
(
    id          INT  NOT NULL AUTO_INCREMENT,
    room_id     INT  NOT NULL,
    user_id     INT  NOT NULL,
    start_date  DATE NOT NULL,
    end_date    DATE NOT NULL,
    delete_time DATE,
    PRIMARY KEY (ID),
    FOREIGN KEY (room_id) REFERENCES rooms (id),
    FOREIGN KEY (user_id) REFERENCES users (id)
);

Мне необходимо реализовать обновление поля delete_time в обеих таблицах в едином запросе по room_id. Я придумал такой запрос:

update rooms r, bookings b
set r.delete_time = sysdate(), b.delete_time = sysdate()
where r.id = 7 and r.id = b.room_id;

И он отлично работает, если на комнату есть хотя бы одно бронирование. Но В случае, если бронирований на комнату нет, мне надо просто обновлять поле delete_time у комнаты. Как это можно реализовать?


Ответы (1 шт):

Автор решения: Fat-Zer

Можно просто сделать LEFT JOIN:

UPDATE rooms AS r 
  LEFT JOIN bookings AS b ON r.id = b.room_id
SET r.delete_time = sysdate(), b.delete_time = sysdate()
WHERE r.id = 7;
→ Ссылка