【问题标题】:How to get Result from database by order the condition put in "IN" clause?如何通过命令“IN”子句中的条件从数据库中获取结果?
【发布时间】:2010-07-12 11:24:28
【问题描述】:

抱歉英语不好。

bfproduct 是一个表,productid 是这个表的主键,productname 是这个表中定义的另一个字段。

当我执行这个查询时,select * from bfproduct where productid in (23,5,54,3132,32)。结果如下:

产品ID |产品名称 5 15 公园大道 23 好孩子坏孩子 32 dsf sf gfdsf dsf d 54 dsdsfsa ffs ff sfsf 3132正义书籍-论法律制度的失败

有什么方法可以让我按照“IN”子句中提供的 productid 的顺序获得结果集,例如

产品ID |产品名称 23 好孩子坏孩子 5 15 公园大道 54 dsdsfsa ffs ff sfsf 3132正义书籍-论法律制度的失败 32 dsf sf gfdsf dsf d

请帮忙...

【问题讨论】:

    标签: sql database sql-server-2005


    【解决方案1】:

    这是一种方法:

    SELECT *
    FROM bfproduct
    WHERE productid
    IN (23,5,54,3132,32)
    ORDER BY
       CASE productid
          WHEN   23 THEN 0
          WHEN    5 THEN 1
          WHEN   54 THEN 2
          WHEN 3132 THEN 3
          WHEN   32 THEN 4
       END
    

    【讨论】:

    • 这非常适合一次性使用,但在我看来,另一种解决方案更适合构建可重复使用的解决方案。
    【解决方案2】:

    我能想到的第一件事,尝试类似...

    select  bfproduct.*
    from    bfproduct INNER JOIN
    (
        select 1 as sequence, 23 as productid
        union
        select 2,5
        union
        select 3,54
        union
        select 4,3132
        union
        select 5,32
    ) as lookup on bfproduct.productid=lookup.productid
    order by lookup.sequence
    

    (我还没有测试过,所以可能有一些小的语法错误!)

    【讨论】:

    • 这与上面标记 byers 回答的想法相似(我认为它更优雅,所以我投了赞成票)
    • 这个解决方案的好处是您只需指定一次所需的顺序和关键字段。这也为可重用提供了解决方案。对于另一种解决方案,您需要在每次创建新报告时同时创建 sort 和 where 子句。
    • 当然在这种情况下,UNION ALL 比 UNION 更合适
    【解决方案3】:

    您必须添加一个 ORDER BY 子句,以正确排列行。

    【讨论】:

    猜你喜欢
    • 2021-07-24
    • 1970-01-01
    • 1970-01-01
    • 2020-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-09
    相关资源
    最近更新 更多