При использовании оператора ИЛИ будет ли запрос возвращать условие слева над правым? - PullRequest
0 голосов
/ 29 апреля 2020

Я хочу вернуть одну строку, но хочу, чтобы один запрос соответствовал двум условиям.

Например,

SELECT * FROM user WHERE admin < 10 OR admin > 100 LIMIT 1

Когда я сделаю запрос, будет ли это вернуть первую найденную строку, которая имеет значение администратора меньше 10? Если нет, то как бы я этого достиг?

Ответы [ 2 ]

0 голосов
/ 29 апреля 2020

Вы можете сделать это, используя order by. Я бы предложил:

SELECT *
FROM user
WHERE admin < 10 OR admin > 100
ORDER BY admin
LIMIT 1
0 голосов
/ 29 апреля 2020

Из комментариев:

Я хочу найти первую строку, которая имеет admin <10, но если нет строк, имеющих это значение, то я хочу вернуть первую строку, которая имеет admin > 100

В одной опции используются union all и not exists:

(select * from users where admin < 10 limit 1)
union all
(
    select * 
    from users 
    where 
        admin > 100 
        and not exists (select 1 from users where admin < 10)
    limit 1
)

Другое решение - условная сортировка:

select *
from users 
where admin < 10 and admin > 100
order by case when admin < 10 then 1 else 2 end
limit 1

Примечание что ваш запрос будет иметь больше смысла, если вы добавите к нему предложение order by. Использование limit без order by приводит к тому, что строка abritrary возвращается из тех, которые удовлетворяют предикатам.

...