SQL First Match或者只是First

时间:2010-11-15 16:17:11

标签: sql

因为这是更大的SQL SELECT语句的一部分,所以我想要一个完整的SQL查询来选择匹配条件的第一个项目,或者,如果没有项目符合条件,则只需要第一个项目。

即。使用Linq我想:

Dim t1 = From t In Tt

Dim t2 = From t In t1 Where Criteria(t)

Dim firstIfAny = From t In If(t2.Any, t2, t1) Take 1 Select t

因为If不是Linq的一部分,所以LinqPad不显示单个SQL语句,而是显示两个,第二个取决于Criteria是否匹配任何Tt值。

我知道它会是SELECT TOP 1等等我可以添加ORDER BY条款来获取我想要的特定第一个条款,但是我无法想到获得第一个最直接的方法两个标准。 (正是在我能够自己解决这个问题的时候。)

看到我没有看到现有的问题,我会让它成立。我相信其他人会很快看到答案。

2 个答案:

答案 0 :(得分:2)

select top 1 *
from (
    select top 1 *, 1 as Rank from MyTable where SomeColumn = MyCriteria
    union all
    select top 1 *, 2 as Rank from MyTable order by MyOrderColumn
) a 
order by Rank

答案 1 :(得分:1)

我已经离开了:

SELECT TOP 1 *
FROM MyTable
WHERE SomeColumn = MyCriteria
 OR NOT (EXISTS (SELECT NULL FROM MyTable WHERE SomeColumn = MyCriteria))
ORDER BY MyOrdering

我的实际SomeColumn = MyCriteria当然要复杂得多,以及其他无关的where子句。