Путаница с использованием логических операторов в MySql - PullRequest
0 голосов
/ 24 мая 2018

У меня есть таблица с именем users, как показано ниже:

enter image description here

Теперь, когда я запускаю запрос как:

select * from users where name='admin1' AND 1;

Я получаю в качестве вывода только запись admin1, как показано ниже: enter image description here

В то время как с запросом как:

select * from users where name='admin1' OR 1;

, я получаю в качестве выводавсе записи, как показано ниже: enter image description here

Я пытаюсь понять, почему это происходит.ИМХО, если мы говорим об оценке логического выражения, оба вышеприведенных запроса оцениваются в 1, поскольку они оба

1 И 1

и

1 ИЛИ 1

Так почему такая разница?Или есть что-то фундаментальное, чего мне, возможно, не хватает?

Ответы [ 2 ]

0 голосов
/ 24 мая 2018

Просто добавьте к ответу @ DanoPlurana, что я считаю правильным.

Я бы настоятельно не рекомендовал писать запросы таким образом, поскольку они не соответствуют стандарту SQL и их трудно читать.Если вы не уверены в их значении, я уверен, что следующий разработчик (и), который прочитает его после вас для технического обслуживания, тоже будет.И это приводит к реальным дефектам в производстве и реальной потере денег для ваших клиентов.

Просто напишите нормальные логические условия и сделайте жизнь проще для всех.

0 голосов
/ 24 мая 2018

Работает нормально.Первый запрос должен удовлетворять обоим условиям, поэтому имя должно быть «admin1», а 1 всегда верно.Поэтому в результате вы получаете только одну строку с именем admin1

Во втором запросе должно быть выполнено только одно из условий, поэтому вы получаете все результаты из таблицы

enter image description here

...