TL; DR:如何将不相关的表中的两个不同排序的 SELECT
组合成一个结果?
我们说我有2张不相关的牌桌 - 猫和游戏。
表"猫":
+----+----------------+-----+
| id | name | age |
+----+----------------+-----+
| 1 | Balthazar | 3 |
| 2 | Milkman | 7 |
| 3 | The Dark Angel | 4 |
+----+----------------+-----+
表"游戏"
+----+----------+-------+
| id | name | plays |
+----+----------+-------+
| 1 | Snake | 18 |
| 2 | Lemmings | 234 |
| 3 | Ludo | 33 |
+----+----------+-------+
对于每个表格,我需要SELECT
来订购它们,并获得不同的列:
SELECT age FROM `cats` ORDER BY age DESC;
和
SELECT plays FROM `games` ORDER BY plays DESC;
我希望得到两个结果使用一个查询,而不是两个。预期结果:
+-----+-------+
| age | plays |
+-----+-------+
| 7 | 234 |
| 4 | 33 |
| 3 | 18 |
+-----+-------+
JOIN
没有意义,因为这些表没有任何关系。我在考虑使用UNION
,但我无法弄清楚如何处理这两个查询的事实:
任何想法如何实现这一目标?
答案 0 :(得分:3)
一种方法是计算行号,然后加入该值:
select rn, max(age) as age, max(plays) as plays
from ((select c.age, NULL as plays, (@rnc := @rnc + 1) as rn
from cats c cross join (select @rnc := 0) params
) union all
(select NULL as age, g.plays, (@rng := @rng + 1) as rn
from games g cross join (select @rng := 0) params
)
) cg
group by rn;
答案 1 :(得分:0)
select age,plays from cats inner join games on cats.id=games.id