sql - 在 mySQL 的 WHERE IN 子句中保持排序

标签 sql mysql where-in

我正在运行以下 SQL 查询:

SELECT * FROM cms_albums WHERE id IN (SELECT album_id FROM cms_albums_collections WHERE collection_id = 1 ORDER BY position ASC)

现在,假设内部查询

SELECT album_id FROM cms_albums_collections WHERE collection_id = 1 ORDER BY position ASC

返回以下内容:

album_id
"4"
"2"

这就是我想要的顺序。 然而,整个查询将返回:

id   name   
"2" "Second album"
"4" "First album"

我假设这是因为“cms_albums”表中的条目按此顺序排列。 有什么方法可以按照内部查询给出的顺序获得总体结果吗?

谢谢

最佳答案

尝试这个变体:

SELECT  DISTINCT c.*
FROM    cms_albums c
JOIN    cms_albums_collections cc
ON      c.id = cc.album_id
WHERE   cc.collection_id = 1
ORDER BY
        cc.position ASC

IN 列表中的项目顺序会丢失,而是形成一个联接,然后您可以应用您想要的顺序。

关于sql - 在 mySQL 的 WHERE IN 子句中保持排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1698722/

相关文章:

返回范围的 SQL Select 查询

php - 从 mysql 过渡到 MySQLi 或 PDO

mysql - 重命名 MySQL 中的重复行,WHERE IN () - 不能正常工作

MySQL 多个 IN 子句不起作用

mysql - Laravel 过滤多个WhereIn 数组

sql - 删除 FOR XML 中的行元素

java - 在 Hibernate 4.2.21 中删除表的所有行

python - 使用 pandas 按列分组,然后根据条件创建新列

mysql - 为什么 mysql 索引中的基数值不等于列值的不同计数

mysql - 使用2个不同的数据库好吗