我加入的其中一个表格中没有条目时,我遇到了问题。
设置如下:
(此表包含可以将人员列入免费入境名单的人员列表)
表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的条目,我需要更改以获得总数?
答案 0 :(得分:0)
如果您只是寻找促销员所允许的人数,那就是。
SELECT SUM(t.Guests)
FROM Table1 AS t
答案 1 :(得分:0)
您可以将LEFT JOIN
与IFNULL
结合使用,以获得您想要的内容:
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