如何将多个SQL查询合并为一个

时间:2014-06-12 21:18:41

标签: mysql sql

我想将几个查询的结果合并为一个,但我想知道它是否可能。 第一个查询计算每个推荐在特定年份中的游戏数量:

SELECT  count(1),ejl_refery.surname FROM  ejl_protocols 
left join ejl_refery on ejl_protocols.refery = ejl_refery.id
WHERE  ejl_protocols.season = 2013 group by refery

第二个查询计算每个引用的惩罚次数:

SELECT  count(1),ejl_refery.surname FROM  ejl_protocols 
left join ejl_play_events on ejl_protocols.id = ejl_play_events.protocol_id
left join ejl_refery on ejl_protocols.refery = ejl_refery.id
WHERE  ejl_protocols.season = 2013 and ejl_play_events.event_id  in (3,4) 
group by refery

我还有1个类似的查询。 结果应该是一个可以生成表格的SQL:

Refery Surname | Number of games | Number of penalties | Number of cards |

我尝试了一些组合将它们放在一起,但它们都以语法错误结束。

1 个答案:

答案 0 :(得分:1)

您应该能够将每个查询视为派生表,并将它们连接在一起。您在查询中加入的唯一内容就是姓氏,但是因为那就是你所有的分组都不重要。

Select
g.surname,
g,games,
p.penalties

from
(SELECT  count(1) as games,ejl_refery.surname FROM  ejl_protocols 
left join ejl_refery on ejl_protocols.refery = ejl_refery.id
WHERE  ejl_protocols.season = 2013 group by refery) g
inner join 
(SELECT  count(1) as penalties,ejl_refery.surname FROM  ejl_protocols 
left join ejl_play_events on ejl_protocols.id = ejl_play_events.protocol_id
left join ejl_refery on ejl_protocols.refery = ejl_refery.id
WHERE  ejl_protocols.season = 2013 and ejl_play_events.event_id  in (3,4) 
group by refery) p
on g.surname = p.surname

如果你有第三个查询,你可以使用相同的逻辑将其添加到那里。