У меня есть таблица, называемая users
как показано ниже:
Теперь, когда я запускаю запрос как:
select * from users where name='admin1' AND 1;
Я получаю как вывод только запись admin1
как показано ниже:
Хотя с запросом:
select * from users where name='admin1' OR 1;
Я получаю как вывод всех записей, как показано ниже:
Я пытаюсь понять, почему это происходит. ИМХО, если мы говорим об оценке логического выражения, оба вышеуказанных запроса оценивают до 1, поскольку оба они
1 И 1
а также
1 ИЛИ 1
Так почему это различие? Или есть что-то фундаментальное, что мне, возможно, не хватает?
Просто чтобы добавить к ответу @DanoPlurana, я считаю правильным.
Я бы категорически отказался писать запросы таким образом, поскольку они не соответствуют стандарту SQL, и их трудно читать. Если вы запутались в их значении, я готов поспорить, что следующий разработчик (разработчики), которые прочитают его после вас, также будут обслуживаться. И это создает реальные дефекты в производстве и реальную потерю денег для ваших клиентов.
Просто напишите нормальные булевские условия и сделайте жизнь проще для всех.
Он работает нормально. Первый запрос должен удовлетворять обоим условиям, поэтому имя должно быть "admin1", а 1 всегда истинно. Вот почему вы получаете только одну строку в результате с именем admin1
Во втором запросе должно быть удовлетворено только одно из условий, поэтому вы получаете все результаты из своей таблицы
NOT ( A OR B )
.)