我们正在查询数据库以按以下方式检索数据
从表 1 中选择 a,b,...f,其中 id 在 (6,33,1,78,2)
我从查询中得到的结果按照 1、2、6、33、78 的顺序排列。
我希望结果以相同的顺序(6,33,1,78,2)。有没有办法以相同的顺序检索数据。
编辑 *我正在使用 SQL 2008 *
我们正在查询数据库以按以下方式检索数据
从表 1 中选择 a,b,...f,其中 id 在 (6,33,1,78,2)
我从查询中得到的结果按照 1、2、6、33、78 的顺序排列。
我希望结果以相同的顺序(6,33,1,78,2)。有没有办法以相同的顺序检索数据。
编辑 *我正在使用 SQL 2008 *
添加此 order by 子句
order by case
when id = 6 then 1
when id = 33 then 2
when id = 1 then 3
when id = 78 then 4
when id = 2 then 5
end
如果使用 MySQL,你可以这样做
ORDER BY FIND_IN_SET(id, '6,33,1,78,2')
使用表值构造函数:
SELECT a, b, ... f
FROM
table1
JOIN
( VALUES
(1, 6),
(2, 33),
(3, 1),
(4, 78),
(5, 2)
) AS ordering (position, id)
ON ordering.id = table1.id
ORDER BY position
我不知道背景,但通常我在一个额外的 orderIndex 列中实现这个自定义订单。这样我可以在插入表时手动管理顺序并将此列添加到默认查询的 ORDER BY 子句中
如果您使用 SQL Server,您可以使用charindex
.
select A, B
from Table1
where ID in (6,33,1,78,2)
order by charindex(','+cast(ID as varchar(10))+',', ',6,33,1,78,2,')
丑陋的解决方案:
select a,b,...f from table1 where id in 6
UNION
select a,b,...f from table1 where id in 33
and so on..
“更好”的解决方案:在您的查询中添加另一列,然后执行案例 6,然后执行 0,案例 33,然后执行 1,依此类推
select a,b,...f , case id when 6 then 0 when 33 then 1 <and so on> end
from table1 where ...
然后按这个新列排序