MySQL:对两个联接表中的多个值进行条件求和

MySQL:对两个联接表中的多个值进行条件求和,mysql,Mysql,以下是我问题的后续内容: 我有两张桌子。表1是我们的主要数据表,表2有表1列的子集和表1中包含的记录的子集。您可以将表2视为包含表1中某些记录的更正值的表 以下是我的表格和示例数据: 表1 | page_id | field_id | date | value | bla | --------------------------------------------------| | 1 | 1 | 2012-01-01 | 3 | 1 |

以下是我问题的后续内容:

我有两张桌子。表1是我们的主要数据表,表2有表1列的子集和表1中包含的记录的子集。您可以将表2视为包含表1中某些记录的更正值的表

以下是我的表格和示例数据:

表1

| page_id | field_id | date       | value | bla   |
--------------------------------------------------|
|     1   |      1   | 2012-01-01 |   3   |   1   |
|     2   |      1   | 2012-01-01 |   10  |   2   |
|     3   |      1   | 2012-01-01 |   25  |   2   |
|     1   |      2   | 2012-01-01 |   11  |   3   |
|     2   |      2   | 2012-01-01 |   22  |   1   |
|     3   |      2   | 2012-01-01 |   33  |   2   |
表2

| page_id | field_id | date       | value | 
-------------------------------------------
|     1   |      1   | 2012-01-01 |   1   |
|     2   |      1   | 2012-01-01 |   2   |
|     3   |      1   | 2012-01-01 |   3   |
|     4   |      1   | 2012-01-01 |   4   |
我想按照以下规则计算一个或多个字段ID的值之和:

(1) 如果指定字段_id之一的记录仅存在于表1中,我希望对字段_id与指定字段_id匹配的所有记录的值和bla求和

(2) 如果字段_id同时存在于表1和表2中,那么我们将从表2中获得值之和,从表1获得bla之和

以下是我正在使用的查询:

SELECT t1.field_id,
SUM(IFNULL(t2.value, IFNULL(t1.value,0))) as 'Value Sum',
SUM(IFNULL(t1.bla,0)) as 'Bla Sum'
FROM test.Table1 t1
LEFT JOIN test.Table2 t2 ON t1.field_id = t2.field_id
WHERE (t1.field_id IN (1,2))
GROUP BY t1.field_id, t1.date;
但我没有得到字段_1的正确总和:

|field_id | Value Sum  | Bla Sum| 
---------------------------------
|      1  |      30    |   20   | <-- was expecting 10 and 5, respectively 
|      2  |      66    |    6   |
|字段| id |值和| Bla和|
---------------------------------

|1 | 30 | 20 |您还需要将页面| id添加到联接中,否则表1中的3行和表2中的4行会导致字段_id1出现12列

SELECT t1.field_id,
SUM(IFNULL(t2.value, IFNULL(t1.value,0))) as 'Value Sum',
SUM(IFNULL(t1.bla,0)) as 'Bla Sum'
FROM test.Table1 t1
LEFT JOIN test.Table2 t2 ON t1.field_id = t2.field_id AND t1.page_id =t2.page_id
WHERE t1.field_id IN (1,2)
GROUP BY t1.field_id;
还通过
t1.日期删除了组