开发者社区> 问答> 正文

按SQL IN()子句中值的顺序排序

我想知道是否有按IN()子句中的值顺序进行排序的方法(可能是一种更好的方法)。

问题是我有2个查询,一个查询获取所有ID,第二个查询获取所有信息。第一个创建我要第二个排序的ID的顺序。这些ID以正确的顺序放入IN()子句中。

因此,它类似于(极其简化):

SELECT id FROM table1 WHERE ... ORDER BY display_order, name

SELECT name, description, ... WHERE id IN ([id's from first]) 问题在于第二个查询不会以将ID放入IN()子句中的顺序来返回结果。

我发现的一种解决方案是将所有ID放入具有自动递增字段的临时表中,然后将其加入第二个查询中。

有更好的选择吗?

注意:由于第一个查询是“由用户”运行的,第二个查询是在后台进程中运行的,因此无法使用子查询将2合并为1。

我正在使用MySQL,但我想让它指出其他数据库也有哪些选项可能会很有用。

展开
收起
保持可爱mmm 2020-05-10 18:36:49 455 0
1 条回答
写回答
取消 提交回答
  • 使用MySQL的FIELD()功能:

    SELECT name, description, ... FROM ... WHERE id IN([ids, any order]) ORDER BY FIELD(id, [ids in order]) FIELD() 将返回等于第一个参数的第一个参数的索引(第一个参数本身除外)。

    FIELD('a', 'a', 'b', 'c')

    将返回1

    FIELD('a', 'c', 'b', 'a')

    将返回3

    如果将id 按相同的顺序粘贴到IN()子句和FIELD()函数中,这将完全满足您的要求。来源:stack overflow

    2020-05-10 18:37:10
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
SQL Server 2017 立即下载
GeoMesa on Spark SQL 立即下载
原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载