我有两个表,Posts
和Cache
。
Cache
表保存了我应该显示的帖子。帖子ID保存在PostIDs
表格中的Cache
列中,以逗号(,
)分隔。
这是我的代码:
SELECT * FROM Posts a
WHERE ID IN
(
SELECT item FROM Cache AS b
CROSS APPLY dbo.fnSplit(b.postIDs, ',')
WHERE ((b.ownerID = 1) AND (b.magID = 8))
)
此外fnSplit
工作正常。
但问题是,帖子的顺序不正确。
例如,如果我们在Cache
:5,1,9,4,10,3
中有此字符串,我希望从Posts
获得该订单的帖子。 (第一行应该是ID为5的帖子,然后是1,然后是9,然后是4,......)
但我的代码以其他顺序返回帖子:1,3,4,5,9,10
(Posts
表中的行顺序)
我应该怎样做(纯SQL)以Cache
表中指定的顺序获取项目? (在该示例中,我希望按此顺序获得帖子:5,1,9,4,10,3
)
答案 0 :(得分:1)
根据您的示例,这应该有效(其中cacheorder是您要按顺序排序的字段)
SELECT * FROM Posts a
inner join
(
SELECT item, cacheorder FROM Cache AS b
CROSS APPLY dbo.fnSplit(b.postIDs, ',')
WHERE ((b.ownerID = 1) AND (b.magID = 8))
) v
ON a.ID = v.item
ORDER BY CacheOrder
然而