2016-11-26 107 views
0

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

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

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>)); 

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

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

回答

0

如果你想一排,用order bylimit

select t.* 
from t 
where <criterion1> or <criterion2> 
order by (case when <criterion1> then 1 else 2 end) 
limit 1; 
+0

好吧,这是我不需要重复瓦尔的优势,但我必须为标准这样做。似乎我必须做一个或另一个。 – user52366