我想返回单个行,但需要一个查询来限定这两个条件。
例如
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 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
子句,则查询更有意义。在不使用order by
的情况下使用limit
会导致从满足谓词的行中返回结构行。