gpt4 book ai didi

mySQL 创建两个表交替行的结果集

转载 作者:行者123 更新时间:2023-11-29 04:10:32 25 4
gpt4 key购买 nike

我有一个使用联合来连接两个子查询的查询,例如

SELECT * FROM posts WHERE postTypeId=1 (e.g. blog)
UNION
SELECT * FROM posts WHERE postTypeId=2 (e.g. news)

此方法生成的结果集按顺序定位两个子集(“博客”然后“新闻”)。

我想创建一个将两者交错的结果集,在“博客”子集和“新闻”子集的行之间交替。

我觉得一定有一个简单的方法可以做到这一点,但我没找到。

如有任何建议,我们将不胜感激。

尼克

最佳答案

这是最适合我的解决方案。它与当前的任何提案都不相同,因此我单独添加了它。 @a、@b 和@c 用于为每个子集创建行号,这意味着在组合结果中,3 行将共享相同的行号(“行集”)。这用作一阶排序,二阶排序然后对“行集”中的行进行排序。

SET @a = 0;
SET @b = 0;
SET @c = 0;

SELECT * FROM(
SELECT @a := @a + 1 AS sortOne, 1 AS sortTwo, posts.* FROM posts WHERE posts.postTypeId=3
UNION
SELECT @b := @b + 1 AS sortOne, 2 AS sortTwo, posts.* FROM posts WHERE posts.postTypeId=2
UNION
SELECT @c := @c + 1 AS sortOne, 3 AS sortTwo, posts.* FROM posts WHERE posts.postTypeId=1
) AS result ORDER BY sortOne, sortTwo

此解决方案是从提交的解决方案派生/启发而来的,但我认为将其中任何一个标记为本身已被接受的解决方案是不合适的。所以,感谢 Thomas Clayson、Tony Hopkinson 和 rmunoz,他们的回答我投了赞成票。干杯!

关于mySQL 创建两个表交替行的结果集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12277665/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com