[英]Keeping ordering in a WHERE IN clause in my SQL
我正在运行以下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列表中项目的顺序丢失,而是形成联接,然后可以应用所需的顺序。
我不同意这样的说法,即返回的结果必然是表的顺序或行插入表的顺序。 如果服务器使用的执行计划使用了非聚集索引或内存中的数据集,则排序顺序将不一定反映实际表的顺序或插入数据的顺序。 话虽如此,有一些选择可以实现您的目标:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.