2012-02-11 66 views
2

我有两个表:工作&活动。 作业由零个或多个活动组成。MySQL加入查询构造

JOBS (id,client_name,job_cost): 

1, 'Kelly, Peter', '139.00' 


ACTIVITIES (id,job_id,activity_name,activity_cost): 

1, 1, 'Activity A', '40.00' 

2, 1, 'Activity B', '59.00' 

3, 1, 'Activity C', '40.00' 

如何编写一个查询检索以下字段:

DESIRED OUTPUT FIELDS: 

job_id, client_name, job_cost, total_cost_of_activities, number_of_activities 

理解,因为MySQL的任何帮助,是不是我的强项之一!

+1

+1因为想在一个查询中执行该操作,而不是多个查询和服务器端代码。 – 2012-02-11 18:48:48

回答

2
SELECT 
    JOBS.*, 
    SUM(ACTIVITIES.activity_cost) AS total_cost_of_activities, 
    COUNT(ACTIVITIES.id) AS number_of_activities 
FROM 
    JOBS 
    INNER JOIN ACTIVITIES on ACTIVITIES.job_id=JOBS.id 
GROUP BY JOBS.id 
+0

我想你也想要一个'GROUP BY' – yshavit 2012-02-11 18:49:10

+0

@yshavit谢谢,'ERR 0xDEADBEEF:不完整的复制粘贴作业' – 2012-02-11 18:50:35

1
SELECT jobs.id, jobs.client_name, jobs.job_cost, 
COUNT(Activities.*) AS number_of_activities, SUM(activity_cost) as total_cost_of_activities 
FROM Jobs INNER JOIN Activities 
ON Activities.job_id = jobs.id 
GROUP BY jobs.id, jobs.client_name, jobs.job_cost 

编辑:我还没有在MySQL的工作。我假设基本的SQL语法与MySQL保持一致。

3
SELECT j.id, j.client_name, j.job_cost, 
COUNT(a.id) AS number_of_activities, SUM(activity_cost) as total_cost_of_activities 
FROM Jobs AS j 
INNER JOIN Activities AS a ON j.id = a.job_id 
GROUP BY j.id, j.client_name, j.job_cost 

请注意:数值类型不应该被存储为VARCHAR S(你在引号写出来)。为了节省速度和空间,您应该使用数字数据类型,例如DECIMAL。