MySQL左连接和分组方式
我有两张桌子,一张是足球赛,一张是进球。我正在尝试用两个球之间的左路连接进行选择,计算主客场进球数。表格如下:MySQL左连接和分组方式,mysql,join,left-join,Mysql,Join,Left Join,我有两张桌子,一张是足球赛,一张是进球。我正在尝试用两个球之间的左路连接进行选择,计算主客场进球数。表格如下: CREATE TABLE `matches` ( `id` int(11) NOT NULL AUTO_INCREMENT, `home_team_id` int(11) NOT NULL, `away_team_id` int(11) NOT NULL ... CREATE TABLE `match_goals` ( `id` int(11)
CREATE TABLE `matches` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`home_team_id` int(11) NOT NULL,
`away_team_id` int(11) NOT NULL
...
CREATE TABLE `match_goals` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`match_id` int(11) NOT NULL,
`team_id` int(11) NOT NULL,
`minute` int(11) NOT NULL
...
SELECT *
FROM
(SELECT id, home_team_id, away_team_id from matches) m,
(SELECT count(*) AS score, match_id, team_id from match_goals group by match_id, team_id) g
WHERE m.home_team_id = g.team_id
ORDER by m.id
为了增加主队的所有目标,我想做如下事情:
CREATE TABLE `matches` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`home_team_id` int(11) NOT NULL,
`away_team_id` int(11) NOT NULL
...
CREATE TABLE `match_goals` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`match_id` int(11) NOT NULL,
`team_id` int(11) NOT NULL,
`minute` int(11) NOT NULL
...
SELECT *
FROM
(SELECT id, home_team_id, away_team_id from matches) m,
(SELECT count(*) AS score, match_id, team_id from match_goals group by match_id, team_id) g
WHERE m.home_team_id = g.team_id
ORDER by m.id
这将带回一行团队的分数,可以是正整数或0(或null)
到目前为止,我还没有做到这一点——如果没有进球,就不会有争吵。我做错了什么?!非常感谢任何帮助(或其他问题的链接-我已经浏览了很多,但没有找到任何我能够适应的内容)
谢谢
托比试试看
select m.id match_id, home_team_goal, away_team_goal
from matches m left join
( select team_id, match_id, count(*) as home_team_goal
from match_goals
group by match_id,team_id
) hg on m.id=hg.match_id and m.home_team_id=hg.team_id
left join
( select team_id, match_id, count(*) as away_team_goal
from match_goals
group by match_id,team_id
) ag on m.id=ag.match_id and m.away_team_id=ag.team_id
如果我们看一下:
如果你想让主客场球队都得分,你需要做2次联合
对于只有主队得分的情况,您的查询将如下所示:
Select *
FROM matches as m
LEFT JOIN (
SELECT match_id, team_id, count(*) as count
from match_goals
GROUP BY match_id,team_id) as mg)
ON m.id = mg.match_id and m.home_team_id = mg.team_id
这对于相关子查询可能最容易,而不是显式的
左连接
:
select m.*,
(select count(*)
from match_goals mg
where mg.match_id = m.id and mg.team_id = m.home_team_id
) as home_goals,
(select count(*)
from match_goals mg
where mg.match_id = m.id and mg.team_id = m.away_team_id
) as away_goals
from matches m;
发布sqlfiddle和期望的结果我认为这正是我想要的,太简单了,太棒了,谢谢!!