如何在一个查询中从多个表中获取值?

时间:2017-12-02 20:44:44

标签: mysql sql

表1(游戏1):

Table: game1
id | score | user
 1 |   7   | john
 2 |   3   | alex
 3 |   21  | annie
 4 |   12  | max

表2(游戏2):

Table: game2
id | score | user
 1 |   12  | john
 2 |   50  | alex
 3 |   2   | annie
 4 |   9   | max

我想从每个桌面游戏中获取高分值,以获得类似的结果:

game1 | game2
  21  |  50

4 个答案:

答案 0 :(得分:2)

您可以使用子查询:

select (select max(score) from game1) as game1,
       (select max(score) from game2) as game2

答案 1 :(得分:1)

试试这个;

select 
(select max(score) from Table1) as Table1,
(select max(score) from Table2) as Table2

答案 2 :(得分:1)

水平扩展的结果集通过使用JOION关键字垂直使用UNION关键字来实现。你说你想要横向,所以这将是一个连接。如果在加入之前将每个表减少到一行,并且没有ON的连接是CROSS JOIN,则不需要任何连接条件

SELECT * FROM
(select max(score) as game1 from game1) a
CROSS JOIN
(select max(score) as game2 from game2) b

依此类推,你可以保持交叉加入任意数量的得分表,只会产生一行

如果你想要检索每个游戏中获得这些分数的人的名字,那么事情会变得更复杂但并非不可能:

SELECT * FROM
(select score as game1score, playername as game1winner from game1 ORDER BY score DESC LIMIT 1) a
CROSS JOIN
(select score as game2score, playername as game2winner from game2 ORDER BY score DESC LIMIT 1) b

希望你不会让两个人得分相同,因为这只会选择其中一个。当出现平局时获得单行结果集是令人头疼的问题

答案 3 :(得分:0)

如果您使用的是Oracle,也可以在from子句中使用DUAL:

SELECT (SELECT MAX(score) FROM game1) AS game1,
       (SELECT MIN(score) FROM game2) AS game2
FROM DUAL;
相关问题