以下是表格和表格的简化列表。他们的专栏:
Table: Sub_Jobs
Columns: ID
Table: Cargo
Columns: ID | Size
Table: Cargo_Assignment
Columns: ID | Sub_Job_ID | Cargo_ID
创建货物并给出尺寸值(数值)。然后通过在Cargo_Assignment表中创建一行将其分配给子作业。
我需要返回分配给该Sub_Job的货物的所有Sub_Jobs ID列表和Cargo.Size的SUM(通过Cargo_Assignment表)。
以下是一些示例数据:
Table: Sub_Jobs
ID
1
2
3
Table: Cargo
ID Size
1 3.5
2 1.2
3 0.5
4 1.8
Table: Cargo_Assignment
ID Sub_Job_ID Cargo_ID
1 1 3
1 1 1
1 2 4
所需的查询结果:
Sub_Job_ID Total_Size
1 4
2 1.8
3 0
MySQL是我的弱点,我真的很难与这一点斗争。我已经尝试了几个小时来完成这项工作,并使用不同的连接和子查询等,但我无法绕过它。
这是我尝试过的一个查询,但它只返回一个结果:
SELECT Sub_Jobs.ID, SUM(Cargo.Size) as Total_Size
FROM Sub_Jobs
INNER JOIN Cargo_Assignment ON Cargo_Assignment.Sub_Job_ID = Sub_Jobs.ID
INNER JOIN Cargo ON Cargo.ID = Cargo_Assignment.Cargo_ID
答案 0 :(得分:1)
您的查询逻辑非常接近。您需要GROUP BY
:
SELECT sj.ID, SUM(c.Size) as Total_Size
FROM Sub_Jobs sj INNER JOIN
Cargo_Assignment ca
ON ca.Sub_Job_ID = sj.ID INNER JOIN
Cargo c
ON c.ID = ca.Cargo_ID
GROUP BY sj.ID;
请注意,您不需要JOIN
到Sub_Jobs
,因为该字段位于Cargo_Assignment
:
SELECT ca.Sub_Job_ID, SUM(c.Size) as Total_Size
FROM Cargo_Assignment ca INNER JOIN
Cargo c
ON c.ID = ca.Cargo_ID
GROUP BY ca.Sub_Job_ID;