подзапрос вернул более 1 таблицы значений - PullRequest
0 голосов
/ 17 апреля 2020

Я пишу курсовой проект (что-то вроде программы для менеджера отеля), и мне нужна небольшая помощь. У меня есть таблицы Reservations и Rooms, и мне нужно рассчитать сумму оплаты после того, как клиент покинет комнату ((End_date - Start_date) * price_per_day), но у меня возникают проблемы с получением price_per_day из таблицы Rooms.

Только мой запрос работает, если в таблице Resertvation есть одна запись, если их 2 или более, я получаю сообщение об ошибке «подзапрос вернул более 1 значения», и я не знаю, как это исправить (проблема в этой части запроса SELECT price_per_day FROM Rooms AS ro JOIN Reservations AS re ON ro.room_id = re.room_id)

Я использую Visual Studio 2019 + SQL Сервер Express LocalDB.

Буду благодарен за любую помощь или подсказку!

UPDATE Reservations
SET Amount_payable = (
        DATEDIFF(day, CONVERT(datetime, Start_date, 104), CONVERT(datetime, End_date, 104)  * (SELECT price_per_day FROM Rooms AS ro JOIN Reservations AS re ON ro.room_id = re.room_id))
    )
WHERE Status = 'Archived'

Таблица бронирования

reservation_id   customer_id   room_id   start_date   end_date   status   Amount_payable
      1               3           3      12.04.2020  05.06.2020  Archived        0
      2               2           4      11.04.2020  30.05.2020   Active         0

Таблица номера

reservation_id   room_id   number_of_persons   room_type   price_per_day   
      0               1           3             Double          300  
      0               2           4             Triple          600   
      0               3           3             Studio          400
      2               4           2             Single          444

1 Ответ

1 голос
/ 17 апреля 2020

вам нужен немного другой подход для решения проблемы.

попробуйте следующее:

UPDATE re
  SET 
      Amount_payable = (DATEDIFF(day, CONVERT(DATETIME, Start_date, 104), CONVERT(DATETIME, End_date, 104)) * price_per_day)
FROM Reservations re
     JOIN Rooms AS ro ON ro.room_id = re.room_id
WHERE STATUS = 'Archived';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...