2013-03-21 90 views
1

我试图写这个SQL查询:MySQL视图,联盟和集团通过

Select t1.tms_id, t1.tms_name, t1.Pts from (
SELECT t.tms_id, t.tms_name, SUM(s.lsc_1stscore) as Pts FROM tb_team as t,tb_league as l, tb_game as g, tb_score as s 
WHERE (t.tms_id = l.lgs_1stplace) AND (l.fk_lsc_id = s.lsc_id) AND (t.fk_gms_id = g.gms_id) AND (g.gms_id = 1) 
GROUP BY t.tms_name 
) t1 
union 
Select t2.tms_id, t2.tms_name, t2.Pts from (
SELECT t.tms_id, t.tms_name, SUM(s.lsc_2ndscore) as Pts FROM tb_team as t,tb_league as l, tb_game as g, tb_score as s 
WHERE (t.tms_id = l.lgs_2ndplace) AND (l.fk_lsc_id = s.lsc_id) AND (t.fk_gms_id = g.gms_id) AND (g.gms_id = 1) 
GROUP BY t.tms_name 
) t2 
union 
Select t3.tms_id, t3.tms_name, t3.Pts from (
SELECT t.tms_id, t.tms_name, SUM(s.lsc_3rdscore) as Pts FROM tb_team as t,tb_league as l, tb_game as g, tb_score as s 
WHERE (t.tms_id = l.lgs_3rdplace) AND (l.fk_lsc_id = s.lsc_id) AND (t.fk_gms_id = g.gms_id) AND (g.gms_id = 1) 
GROUP BY t.tms_name 
) t3 
union 
Select t4.tms_id, t4.tms_name, t4.Pts from (
SELECT t.tms_id, t.tms_name, SUM(s.lsc_4thscore) as Pts FROM tb_team as t,tb_league as l, tb_game as g, tb_score as s 
WHERE (t.tms_id = l.lgs_4thplace) AND (l.fk_lsc_id = s.lsc_id) AND (t.fk_gms_id = g.gms_id) AND (g.gms_id = 1) 
GROUP BY t.tms_name 
) t4 
ORDER BY Pts DESC 

我需要通过这个查询添加组,specificaly最后一个ORDER BY DESC积分之前,但加入GROUP BY tms_id(示例),让我看到相同的结果。

一个朋友推荐我来创建一个视图,但是当我试图告诉我这个错误:

#1349 - View's SELECT contains a subquery in the FROM clause

而且我真的不知道什么是子查询(我搜索了,我真的不理解)。如何重新组织或修复此QUERY以使用另一个GROUP BY?

回答

2
Extract. 

Select t1.tms_id, t1.tms_name, t1.Pts from (
    SELECT t.tms_id, t.tms_name, SUM(s.lsc_1stscore) as Pts FROM tb_team as t,tb_league as l, tb_game as g, tb_score as s 
    WHERE (t.tms_id = l.lgs_1stplace) AND (l.fk_lsc_id = s.lsc_id) AND (t.fk_gms_id = g.gms_id) AND (g.gms_id = 1) 
    GROUP BY t.tms_name 
) t1 

以下是上述sql语句的子查询。

SELECT t.tms_id, t.tms_name, SUM(s.lsc_1stscore) as Pts FROM tb_team as t,tb_league as l, tb_game as g, tb_score as s 
    WHERE (t.tms_id = l.lgs_1stplace) AND (l.fk_lsc_id = s.lsc_id) AND (t.fk_gms_id = g.gms_id) AND (g.gms_id = 1) 
    GROUP BY t.tms_name 

要使用的子查询中的MySQL视图使每个子查询到视图,然后使用该视图,而不是一个子查询。

+1

谢谢你!你的解释清楚了我的一切,现在所有的工作都完美无缺! – 2013-03-21 04:35:57