在我的SQL中的WHERE in子句中保持排序
我正在运行以下SQL查询:在我的SQL中的WHERE in子句中保持排序,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 返回以下内
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列表中项目的顺序已丢失,请改为形成联接,然后您可以应用所需的顺序。尝试以下变体:
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列表中项目的顺序丢失,而不是形成联接,然后您可以应用所需的顺序。我不同意返回的结果必然是表的顺序或行插入表的顺序的说法。如果服务器使用的执行计划使用了非聚集索引或内存中的数据集,则排序顺序不一定反映实际表的顺序或插入数据的顺序。尽管如此,有几个选项可以实现您的目标:
我不同意返回的结果必然是表的顺序或行插入表的顺序的说法。如果服务器使用的执行计划使用了非聚集索引或内存中的数据集,则排序顺序不一定反映实际表的顺序或插入数据的顺序。尽管如此,有几个选项可以实现您的目标:
使用
selectdistinct c.*…
,因为理论上集合可以多次包含给定的唱片集id。使用selectdistinct c.*…
,因为理论上集合可以多次包含给定的唱片集id。