У меня есть этот выбор в моей базе данных MySQL:
select r.ID, r.ReservationDate, SUM(p.Amount) AS Amount
from Reservations r
join Payments p
on r.ID = p.ReservationID
where r.ConfirmationNumber = '123456'
and p.CCLast4 = '3506'
and r.ID = 54321
Это дает мне ровно 1 запись - правильную запись - как и ожидалось.Но если я изменю CCLast4
(3506) на любое старое число / строку, которую захочу, я все равно получу запись обратно, но Amount будет нулевым.Я не ожидал бы никакой записи вообще, потому что предложение where больше не соответствует.Если я изменю ConfirmationNumber
или ID
, как и ожидалось, я не получу никаких результатов.Но CCLast4
полностью игнорируется.
Если я удаляю агрегат: SUM(p.Amount) AS Amount
- все хорошо, и CCLast4
требует правильное число перед возвратом строки.
Iне понимаю, почему агрегат приводит к тому, что предложение where, связанное с таблицей Payments
(столбец CCLast4
), игнорируется.
Как изменить запрос, чтобы использовать агрегатв select и все пункты where соблюдаются?