当使用OR运算符时,查询会返回左条件而不是右条件吗



我想返回单个行,但需要一个查询来限定这两个条件。

例如

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

当我查询它时,它会返回它发现的第一行管理值小于10吗?如果没有,我将如何实现这一点?

您可以使用order by执行此操作。我建议:

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

来自注释:

我想找到具有admin<10,但如果没有具有该值的行,那么我想返回admin>100 的第一行

一个选项使用union allnot 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子句,则查询更有意义。在不使用order by的情况下使用limit会导致从满足谓词的行中返回结构行。

相关内容

  • 没有找到相关文章

最新更新