在汇总列时加入/联合

时间:2014-06-17 13:06:14

标签: mysql sql

我加入的其中一个表格中没有条目时,我遇到了问题。

设置如下:

(此表包含可以将人员列入免费入境名单的人员列表)

表1:

ID,NAME,GUESTS

其中GUESTS是他们在以下列表中没有名字的情况下输入的数量:

(包含所有获准免费入场的人的姓名和嘉宾)

表2:

ID,PROMOTERID,NAME,GUESTS

其中PROMOTERID是表1列号ID的外键。

我们的想法是,表1中GUESTS字段中的任何内容都应添加到此推广者列入表2列表的总客人中。例如,如果ID为4的发起人已放入6人在免费入场名单上,还允许额外的3个人(将存储在表1中的GUESTS值中),我需要一个视图,其中发起人ID的总客人数为9。

只要发起人在表2中有值,这就有效。如果在表2中找不到他的身份证 - 也就是说,如果他让某人免费但却从未将某人列入免费入境名单,他就不会# 39; t包含在视图中。

视图如下:

select `table1`.`NAME` AS `NAME`,`table2`.`PROMOTERID` AS `Promoter`
,(sum(`table2`.`GUESTS`) + `table1`.`GUESTS`) AS `TOTAL` from
(`table1` join `table2` on((`table1`.`ID` = `table2`.`PROMOTERID`))),
group by `table2`.`PROMOTERID`

无论表2中是否存在针对给定启动者ID的条目,我需要更改以获得总数?

2 个答案:

答案 0 :(得分:0)

如果您只是寻找促销员所允许的人数,那就是。

SELECT SUM(t.Guests)
FROM Table1 AS t 

答案 1 :(得分:0)

您可以将LEFT JOINIFNULL结合使用,以获得您想要的内容:

select `table1`.`NAME` AS `NAME`,`table2`.`PROMOTERID` AS `Promoter`
,(IFNULL(sum(`table2`.`GUESTS`),0) + `table1`.`GUESTS`) AS `TOTAL` from
(`table1` LEFT join `table2` on((`table1`.`ID` = `table2`.`PROMOTERID`))),
group by `table1`.`ID`

如果table2没有任何与table1相关的记录,这将给出0(零),因此添加将按照您希望的方式工作。

IFNULL的说明可在此处找到:http://dev.mysql.com/doc/refman/5.0/en/control-flow-functions.html