我们使用下表作为示例:
tableId 1 2 3 4
我想选择tableId等于1或2的第一个值,如果没有选择任何行,则选择3或4.
我可以使用下面的select语句,但它只涵盖第一个条件:
SELECT tableId FROM exampleTable WHERE tableId = 1 OR tableId = 2
我应该在查询中添加什么才能使其正常工作?
这是一种方法:
SELECT tableId FROM exampleTable WHERE tableId IN (1, 2) UNION ALL SELECT tableId FROM exampleTable WHERE tableId IN (3, 4) AND NOT EXISTS (SELECT 1 FROM exampleTable WHERE tableId IN (1, 2));
这是一种替代方法,使用TOP WITH TIES
:
select top 1 with ties from exampleTable where tableId in (1, 2, 3, 4) order by (case when tableId in (1, 2) then 1 else 2 end);
top with ties
order by
键是相同的时返回行.通过使用case
in order by
,您可以保证1和2以及3和4的排序键相同.