代码之家  ›  专栏  ›  技术社区  ›  Michael Pardo

在SQL中,如何使一个匹配列的优先级高于另一个?

  •  0
  • Michael Pardo  · 技术社区  · 12 年前

    我试过几件事,但一无所获。以下是我的疑问:

    SELECT * 
        FROM Companies 
    WHERE 
        Symbol LIKE 'ZY%' OR 
        Name LIKE '%ZY%' 
    ORDER BY Symbol ASC
    LIMIT 2;
    

    基本上,我希望“ZY”在匹配之前匹配(ZNGA,Zynga Inc)(HALO,Halozyme Therapeuti…)。

    显然,订单的原因是查询的这一部分:

    ORDER BY Symbol
    

    我是不是错过了一些显而易见的东西?

    2 回复  |  直到 10 年前
        1
  •  5
  •   Chi    12 年前

    您只需将其添加到Order By子句中

    SELECT * FROM Companies WHERE Symbol LIKE 'ZY%' OR Name LIKE '%ZY%' 
    ORDER BY 
      (CASE WHEN Symbol LIKE 'ZY%' THEN 1
            WHEN Name LIKE '%ZY%' THEN 2
            END),
    Symbol ASC;
    
        2
  •  0
  •   bfavaretto    12 年前

    不确定这是你想要的,但是。。。

    ORDER BY CASE WHEN Symbol LIKE 'ZY%' THEN Symbol ELSE Name END ASC