sql查询返回两个具有不同优先级的查询的结果

问题描述 投票:0回答:1

在单个查询中,我想要实现的是返回与特定条件匹配的记录的id,如果没有找到,则返回另一个标准。所以这两个标准有不同的优先级,简单的“或”不会。

我想出了两个解决方案,但想知道这是否可以简化:

select id,1 as n from <tablename> where <criterion1> 
  union select id,2 as n from <tablename> where <criterion2> 
  order by n asc limit 1;

要么:

select coalesce ((select id from <tablename> where <criterion1>), 
                 (select id from <tablename> where <criterion2>));

我更喜欢的是不必重复两个查询的共同点(实际上我选择了更多列,因此必须并行维护这些列),并且两个查询都涉及同一个表。

如果有快捷方式,我很乐意了解它。

sql select sqlite coalesce
1个回答
0
投票

如果你想要一行,请使用order bylimit

select t.*
from t
where <criterion1> or <criterion2>
order by (case when <criterion1> then 1 else 2 end)
limit 1;
© www.soinside.com 2019 - 2024. All rights reserved.