SQL:两个不同表中的值之和

SQL:两个不同表中的值之和,sql,Sql,我不想这样做(请求帮助),但我被难住了 我正在编写一个曲棍球池程序,其中一个功能是计算所有球员(守门员和滑冰运动员)“为特定的池队比赛”每周的总积分 我有三张桌子 **PoolTeams** PoolTeamID PoolTeamName ---------- ------------ 1 Team A 2 Team B 3 Team C **MondaySkaterStat

我不想这样做(请求帮助),但我被难住了

我正在编写一个曲棍球池程序,其中一个功能是计算所有球员(守门员和滑冰运动员)“为特定的池队比赛”每周的总积分

我有三张桌子

    **PoolTeams** 
PoolTeamID      PoolTeamName
----------      ------------ 
1               Team A 
2               Team B 
3               Team C

**MondaySkaterStats**
Player      Weeknumber       PoolTeam        PTS       Status
------      ----------       --------        ---       ------
10          1                1               15        True
11          2                1               3         False
13          3                2               5         True
40          1                1               3         True
41          2                1               5         False
43          3                2               1         True

**MondayGoalieStats** 
Player           Weeknumber       PoolTeam        PTS       Status
------           ----------       --------        ---       ------ 
20               1                3               4         False 
21               2                1               3         True 
22               3                2               5         False
50               1                3               4         False 
51               2                1               3         True 
52               1                1               7         True
实际的数据库要大得多,为了清晰起见,我截短了它

此外,MondayGoalieStats表还有一些与结果无关的额外列

比如说,我想总结一下每支状态为TRUE的泳池球队(溜冰者和守门员)的所有球员的得分,我只对第1周感兴趣

下面是我提出的一个SQL查询。它在总结MondaySkaterStats积分时效果很好,但无论出于何种原因,它似乎无法正确总结MondayGalieStats表中的积分。 我决定选择内联,因为球员和守门员的位置并不完全相同。我用Weeknumber作为两者的共同点

SELECT PT.PoolTeamName, SUM(MS.PTS) AS PlayerSum, SUM(MG.PTS) as GoalieSum
FROM PoolTeams PT, MondaySkaterStats MS 
INNER JOIN MondayGoalieStats MG ON (MS.Weeknumber=MG.Weeknumber) 
WHERE MS.Weeknumber=1 
AND PT.PoolTeamID = MS.PoolTeam 
AND MS.PoolTeam = MG.PoolTeam 
AND MS.Status = True 
AND MG.Status = True
GROUP BY PT.PoolTeamName

任何帮助都将不胜感激。。。。谢谢

您可以使用
UNION
创建一个中间表,并在每个表中添加一个标签以保持位置分离。 然后,您可以根据团队和职位分组。这将导致每个团队2行,每个位置1行。 最后,
JOIN
加入
PoolTeam
表,以获取要显示的
PoolTeamName

(不同的引擎会有不同的语法;我习惯MySQL)

从长远来看,将这两个表规范化为1将有助于您的数据库设计,可能还有一个用于特殊守门员字段的辅助表

MondayPlayerStats     ExtraGoalieStats
-----------------     ----------------
Id                ->  MondayPlayerId
Pts                   Blocks
Status                ... whatever
WeekNumber
Position (goalie, etc)
... etc

您正在使用的标记数据库您这里有一个奇怪的语法组合…在where子句中使用内部连接语法(最好)或旧的连接,而不是两者都使用。您甚至让mg参与使用这两种方法(where子句中的poolteam,on子句中的week number),数据库结构似乎有点复杂。。。难道不可能有一个全球表“MondayStats”和一个额外的列来存储“skaters”或“goalie”吗?请求会容易得多。这个查询很难阅读,而且很混乱。我甚至不确定这是不是正确的语法。狗仔队,是的。。。同意。我刚刚开始使用SQL,连接让我很困惑……很明显,PoolTeamName不可用。您需要加入。已编辑我的答案,以便在
PoolTeams
表中包含
join
。谢谢。以前也有人提出过类似的建议,我可能不得不同意。我本以为加入谈判桌会很容易,但却会带来很多问题。谢谢你的帮助。
MondayPlayerStats     ExtraGoalieStats
-----------------     ----------------
Id                ->  MondayPlayerId
Pts                   Blocks
Status                ... whatever
WeekNumber
Position (goalie, etc)
... etc