代码之家  ›  专栏  ›  技术社区  ›  Mark Hurd

SQL First Match或just First

sql
  •  1
  • Mark Hurd  · 技术社区  · 14 年前

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

    一、 e.使用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 回复  |  直到 14 年前
        1
  •  2
  •   D'Arcy Rittich    14 年前
    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
    
        2
  •  1
  •   Mark Hurd    14 年前

    我已经说了:

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

    我的实际 SomeColumn = MyCriteria 当然,还有其他不相关的where子句。