【问题标题】:Selecting ID in a certain order specified within IN operator以 IN 运算符中指定的特定顺序选择 ID
【发布时间】:2015-09-02 14:54:21
【问题描述】:

我想尝试以特定顺序选择一组特定的数字,用于循环。

SELECT ID 
FROM filter 
WHERE id in (87, 97, 117, 52, 240, 76, 141, 137, 157, 255, 186, 196, 133,
             175, 153, 224, 59, 205, 65, 47, 105, 80, 113, 293, 161, 145,
             192, 149, 231, 91, 101, 109, 215, 121, 125, 64, 41, 291, 367,
             388, 391, 462, 467) 

这样做会返回按 ID 排序的结果,而不是按我指定的顺序。在大多数其他类似问题中,首选答案是对特定条目使用 CASE,但是按预定顺序选择数百条记录呢?

【问题讨论】:

  • 你需要以这种奇怪的方式订购吗?这背后有什么逻辑吗??
  • 这里为 MySQL 解决了一个类似的问题。看看吧,可能会有帮助:stackoverflow.com/questions/134379/…
  • @Raj 这实际上是一个非常常见的要求 - 例如,用户界面应该按照用户在组合框或文本框中列出的顺序来显示内容。

标签: sql sql-server


【解决方案1】:

如果您有数百个项目,则使用派生表,例如:

select f.id
from filter f join
     (values(1, 87), (2, 97), (3, 117), . . .) as v(ord, id)
     on f.id = v.id
order by ord;

【讨论】:

  • (这是一个很好的方法,但我不能让你称之为临时表,抱歉。​​:-))
  • 这是一个聪明的解决方案。我过去曾四处寻找过类似的内联派生表,但以前从未见过这种语法。它在 postgres 中工作。荣誉。
  • 谢谢,这是一个创造性的解决方案!有没有办法在 ord for (ord, id) 中使用增量函数?
  • @Orin 。 . .并不真地。我的意思是,您可以定义一个带有 identity 列的临时表,但这似乎有点矫枉过正。
猜你喜欢
  • 1970-01-01
  • 2014-01-17
  • 2011-02-26
  • 1970-01-01
  • 1970-01-01
  • 2021-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多