我有2个表,动物和人,我正在使用UNION进行查询以获得两个表的组合列表,但我希望每4个动物我看一个人,即:
结果:
*animal 1
animal 2
animal 3
animal 4*
**person 1**
*animal 5
animal 6
animal 7
animal 8*
**person 2**
etc...
有什么办法吗?
请帮助我!
答案 0 :(得分:2)
使用用户变量,您通常可以模拟企业数据库中的分析(尽管效率不高)
我们生成派生表(UnionSeq)以生成所需的排序,然后添加我们自己的公式,将生成的row_number乘以4 *,这样它将适合第4个动物后使用列别名seq来确定动物出现在人们面前。然后我们从派生表中选择应用所需的排序。
SELECT Name
FROM (SELECT ID, Name, (@p:=@P+1)*4 Row_num, 'b' as Seq
FROM person
CROSS JOIN (SELECT @p:=0) a
UNION ALL
SELECT ID, Name, @a:=@a+1, 'a' as seq
FROM animal
CROSS JOIN (SELECT @a:=0) b) UnionSeq
ORDER BY Row_num, Seq
给我们:
+----+----------+
| | Name |
+----+----------+
| 1 | Animal 1 |
| 2 | Animal 2 |
| 3 | Animal 3 |
| 4 | Animal 4 |
| 5 | Person 1 |
| 6 | Animal 5 |
| 7 | Animal 6 |
| 8 | Animal 7 |
| 9 | Animal 8 |
| 10 | Person 2 |
| 11 | Animal 9 |
| 12 | Person 3 |
+----+----------+
如果动物的人数不成比例,您的样本数据不会显示该怎么办;所以在我的演示中,我只是让每个表都显示基于模式的所有数据,而不管是否无法维护4x1模式。在这个例子中,你可以看到动物9后面是人3,即使没有4只动物。如果有一个人4,它将跟随第3个人,因为没有更多的动物。
这不是魔术;它是数学和一般SQL过程和操作顺序。