Как игнорировать значения NULL и печатать только истинные значения? - PullRequest
0 голосов
/ 08 мая 2019

Я новичок в SQL, поэтому я пытаюсь изучить его, создав простую страницу входа, у меня в базе данных 3 пользователя, и я пытаюсь заставить SQLite возвращать true, если он находит совпадение, и ничего, если оннаходит NULL.

Это таблица с именем "users".

ID          username    password    recovery
----------  ----------  ----------  ---------- 
1           Admin       pass         476 
2           mod         pass123      928      
3           test001     12345        182     

Этот код работает, но возвращает как NULL, так и true:

select case when username in ('mod') 
AND password = ('pass123') then true
else NULL end from users

Что он делает:

1    NULL
2    2
3    NULL

Что мне нужно сделать:

1   2

Я пробовал много вещей, таких как LIMIT и ORDER, но я не могу понять это, любая помощь, пожалуйста?

Ответы [ 2 ]

0 голосов
/ 08 мая 2019

Имея текущий код, вы выбираете все записи в базе данных

ID          username    password    recovery
----------  ----------  ----------  ---------- 
1           Admin       pass         476 
2           mod         pass123      928      
3           test001     12345        182     

, а затем преобразует их в один столбец, показывая true или null в зависимости от значений имени пользователя и пароля. Это то, что вы получаете из-за того, что содержится в вашем предложении SELECT.

То, что вы хотите сделать, это:

  • добавить предложение WHERE, чтобы фактически выбрать нужную запись (имя пользователя = что угодно и пароль = что угодно)
  • в предложении SELECT, покажите идентификатор записи (не уверен, хотите ли вы true или идентификатор, но в соответствии с вашим примером того, что вы хотели, было предложено, чтобы вы хотели идентификатор записи), поэтому SELECT ID
  • возможно ограничение результирующего набора одной записью, если да, добавьте предложение LIMIT (LIMIT 1)
0 голосов
/ 08 мая 2019

Полагаю, вам нужно получить 1, что означает true и 2 для id строки, содержащей данные пользователя.Вам нужен не оператор CASE, а условие в предложении WHERE.Также нет необходимости в операторе LIKE, потому что вы проверяете равенство.Так что сделайте это:

select true, id 
from users 
where username = 'mod' and password = 'pass123' 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...