@AlexandraWeather

В чем нарушение синтаксиса в данном запросе? Как его исправить?

дана вот такая задача
"Добавить отзыв с рейтингом 5 на жилье, находящиеся по адресу "11218, Friel Place, New York", от имени "George Clooney""

Сделала вот такой вот cte:
WITH Reservation_gc AS(
SELECT *
FROM Reservations
WHERE user_id = (
SELECT id
FROM Users
WHERE name = 'George Clooney'
)
AND room_id = (
SELECT id
FROM Rooms
WHERE address = '11218, Friel Place, New York'
)
);

он нормально работает.
после него я могу из него получать данные. Но когда пишу:
INSERT INTO Reviews (id, reservation_id, rating)
SELECT COUNT(*) + 1, (SELECT id FROM Reservation_gc), 5 FROM Reviews
или
INSERT INTO Reviews (id, reservation_id, rating)
VALUES((SELECT COUNT(*) + 1 FROM Reviews), (SELECT id FROM Reservation_gc), 5)
или
INSERT INTO Reviews (id, reservation_id, rating)
SET id = (SELECT COUNT(*) + 1 FROM Reviews),
reservation_id = (SELECT id FROM Reservation_gc),
rating = 5
получаю такую ошибку
"ER_PARSE_ERROR: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '; INSERT INTO Reviews (id, reservation_id, rating) SET id = (SELECT COUNT(*) + 1' at line 14"
Только прохожу эту тему, в предыдущих задачах все получалось
В чем ошибка?
  • Вопрос задан
  • 106 просмотров
Пригласить эксперта
Ответы на вопрос 2
Melkij
@Melkij
PostgreSQL DBA
https://dev.mysql.com/doc/refman/8.4/en/with.html
В mysql нет синтаксиса with ... insert ...
insert ... select допустим в виде INSERT ... WITH ... SELECT ...

мне понравилась идея делать обширные подзапросы отдельно

Аккуратнее, оно к очень большим приключениям.
Ответ написан
Комментировать
@Akina
Сетевой и системный админ, SQL-программист.
дана вот такая задача
"Добавить отзыв с рейтингом 5 на жилье, находящиеся по адресу "11218, Friel Place, New York", от имени "George Clooney""

Это должно быть вот так:
INSERT INTO Reviews (user_id, reservation_id, rating)
SELECT Users.id, Rooms.id, 5
FROM Users
CROSS JOIN Rooms
WHERE users.name = 'George Clooney'
  AND Rooms.address = '11218, Friel Place, New York';

А за каким рожном тут таблица Reservations, я вообще не понял. Задание про необходимость резервирования этого жилья за этим юзером не говорит ничего - то есть такого резервирования может и не быть.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы