以特定顺序从数据库中提取行(不使用ORDER BY)

时间:2011-12-19 20:33:43

标签: mysql sql-order-by

基本上我有一份商品名单18,36,90。我想用这些商品来拉所有行。

在第一种情况下,我想要按照此顺序18,36,90以商品的形式拉出行。以下MYSQL语句以正确的顺序提取它们,因为巧合的是商品或按升序排列:

SELECT * FROM tblMerchants WHERE merchantid=18 OR merchantid=36 OR merchantid=90

如果我想以不同的顺序(例如36,90,18不是升序或降序)拉出商品的行,该怎么办?谢谢!

3 个答案:

答案 0 :(得分:3)

永远不要假设您的数据将按特定顺序返回(因为您声明您的结果当前是由升序版商家返回的),除非您的查询中有明确的ORDER BY。

出于您的目的,您可以使用CASE声明对所需订单进行硬编码。

SELECT *
    FROM tblMerchants
    WHERE merchantid IN (18, 36, 90)
    ORDER BY CASE WHEN merchantid=36 THEN 1
                  WHEN merchantid=90 THEN 2
                  WHEN merchantid=18 THEN 3
                  ELSE 4
             END

答案 1 :(得分:0)

如果您希望以不同的顺序返回结果集,那么默认情况下您必须使用ORDER BY子句。您可以通过随机值进行排序以获得随机订单,也可以使用“虚拟”列定义您自己的订单,您可以在其中任意分配值,然后按该列排序结果集。

答案 2 :(得分:0)

如果您可以使用的SELECT中没有任何其他列,您可以添加一个并执行类似的操作(这是对Joe的回答的变体)。

SELECT *, CASE
      WHEN merchantid = 36 THEN 1
      WHEN merchantid = 90 THEN 2
      WHEN merchantid = 18 THEN 3
    END AS myorder 
  FROM tblMerchants WHERE last_name IN (18, 36, 90)
  ORDER BY myorder