Это на самом деле ожидаемое поведение. Из руководства :
Без GROUP BY существует одна группа, и недетерминировано, какое значение [неагрегированный столбец] выбрать для группы.
blockquote>Хотя это не очень четко указано, это означает, что вы всегда получаете одну группу (то есть одну строку), даже для пустой таблицы.
Также стоит подчеркнуть, что значения, которые MySQL выбирает для неагрегированных столбцов в ваших
select
,r.ID
иr.ReservationDate
, на самом деле являются недетерминированными и будут конкретно различаться в разных версиях MySQL (например, они обычно бытьnull
для MySQL 8.0, в то время как они обычно будут содержать существующие значения для более ранних версий).Решение аналогично тонкое - добавьте
group by
(чтобы цитируемое предложение больше не применяется):... where r.ConfirmationNumber = '123456' and p.CCLast4 = 'xxx' and r.ID = 54321 group by r.ID, r.ReservationDate
должно дать вам 0 строк.
Вот несколько решений с открытым исходным кодом, с которыми я столкнулся, которые заслуживают дальнейшего исследования:
Помимо Park Place, на данный момент единственным большим игроком против S3 является Nirvanix. Nirvanix