Как создать правильный запрос? - PullRequest
0 голосов
/ 24 апреля 2019

Я пытаюсь написать запрос:

SELECT id FROM users WHERE status = 3

Но если этот образец возвращает пустой ответ, то вместо этого мне нужно выбрать идентификатор, где status = 4, и если он снова возвращает пустой, где status = 5.

Как мне написать один запрос для решения этой проблемы?

Ответы [ 4 ]

4 голосов
/ 24 апреля 2019

Я думаю, вы просто хотите:

SELECT id
FROM users 
WHERE status >= 3
ORDER BY status asc
LIMIT 1;

Если вы хотите нескольких пользователей:

SELECT u.id
FROM users u
WHERE u.status = (SELECT MIN(u2.status)
                  FROM users u2
                  WHERE u2.status >= 3
                 );

Если у вас есть фиксированный список, который вы хотите проверить, вы также можете использовать:

select u.id
from users u
where u.status = 3
union all
select u.id
from users u
where u.status = 4 and
      not exists (select 1 from users u2 where u2.status in (3))
union all
select u.id
from users u
where u.status = 5 and
      not exists (select 1 from users u2 where u2.status in (3, 4));
3 голосов
/ 24 апреля 2019

Вы можете использовать условие ИЛИ или использовать оператор IN

SELECT id FROM users WHERE status = 3 or status = 3 or status = 5

или

SELECT id FROM users WHERE status IN (3,4,5)
0 голосов
/ 25 апреля 2019

Предполагая, что ваша таблица выглядит следующим образом:

+----+--------+
| id | status |
+----+--------+
|  1 |      3 |
|  1 |      4 |
|  1 |      5 |
|  3 |      3 |
|  3 |      4 |
|  4 |      4 |
|  4 |      5 |
|  5 |      5 |
+----+--------+

А в зависимости от вашего состояния, когда вы хотите сначала видеть самый низкий статус для каждого идентификатора, вы можете использовать оператор MIN(). Итак, из вашего исходного запроса:

SELECT id,MIN(status) FROM users GROUP BY id;

Тогда вы получите такой результат:

+----+-------------+
| id | MIN(status) |
+----+-------------+
|  1 |      3      |
|  3 |      3      |
|  4 |      4      |
|  5 |      5      |
+----+-------------+
0 голосов
/ 24 апреля 2019

Я буду использовать оператор case в предложении where:

select id 
from users
where status = case when status = 3 and id is null then 4
                    when status = 4 and id is null then 5
               else 3
               end

Дайте мне знать, если у вас есть какие-либо вопросы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...