2

我有这个查询,我想保留订单

SELECT a FROM TABLE WHERE id in (2,45, 87, 10,12, 41, 29)

现在我想要按该顺序的a值我的意思是a for 2,然后是a for 45,然后是a for 87。我怎样才能在sql中完成这个

4

2 回答 2

5

在 MySQL 中,您可以使用 ORDER BY FIELD

SELECT a
FROM yourtable
WHERE id IN (2, 45, 87, 10, 12, 41, 29)
ORDER BY FIELD (id, 2, 45, 87, 10, 12, 41, 29)

在不支持 FIELD 的数据库中,您可以改用 CASE 表达式:

SELECT a
FROM yourtable
WHERE id IN (2, 45, 87, 10, 12, 41, 29)
ORDER BY CASE
    WHEN id = 2 THEN 1
    WHEN id = 45 THEN 2
    WHEN id = 87 THEN 3
    WHEN id = 10 THEN 4
    WHEN id = 12 THEN 5
    WHEN id = 41 THEN 6
    WHEN id = 29 THEN 7
END
于 2012-04-22T07:36:26.217 回答
0

如果您的 id 值来自另一个查询,并且它们的顺序很重要,那么该查询必须有自己的 ORDER BY 子句,以正确的顺序生成 id。然后,您可以在此 ORDER BY 子句中使用联接而不是 IN 子句。这是执行此操作的标准 SQL 查询。

with SelectIDs(id,position) as (
  select 
    id,
    row_number() over (
      order by columnA, columnB
    )
  from table2
  where <your where condition>
)
  select T.*
  from yourTable as T
  join SelectIDs as I
  on I.id = T.id
  order by I.position;

如果您匹配的 id 是不同的而不是 NULL,那么结果应该是您想要的。

于 2012-04-23T00:54:47.007 回答