Mysql 列求和时联接/并集

Mysql 列求和时联接/并集,mysql,sql,Mysql,Sql,当我要加入的某个表中不存在条目时,我遇到了一个问题 设置如下: 此表包含可以将人员放入免费条目列表的人员列表 表1: ID,NAME,GUESTS where GUESTS是指他们在以下列表中没有姓名的情况下租入的人数: 这包含所有被允许自由进入的人的姓名和客人 表2: ID,PROMOTERID,NAME,GUESTS 其中PROMOTERID是表1列ID的外键 我们的想法是,表1中来宾字段中的任何内容都应该添加到该发起人在表2中列出的来宾总数中。e、 例如,如果ID为4的发起人将6人放在

当我要加入的某个表中不存在条目时,我遇到了一个问题

设置如下:

此表包含可以将人员放入免费条目列表的人员列表

表1:

ID,NAME,GUESTS
where GUESTS是指他们在以下列表中没有姓名的情况下租入的人数:

这包含所有被允许自由进入的人的姓名和客人

表2:

ID,PROMOTERID,NAME,GUESTS
其中PROMOTERID是表1列ID的外键

我们的想法是,表1中来宾字段中的任何内容都应该添加到该发起人在表2中列出的来宾总数中。e、 例如,如果ID为4的发起人将6人放在自由进入列表中,但也让另外3人存储在表1中他的来宾值中,我需要一个视图,其中发起人ID的来宾总数为9

只要促进剂的值在表2中,该方法就有效。如果在表2中找不到他的ID,也就是说,如果他免费让某人进来,但从未将某人放在免费进入列表中,则该视图中不包括他

视图看起来像:

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是否存在条目,我需要更改什么才能获得总数?

如果您只是在寻找发起人允许的总人数,那么它将是

SELECT SUM(t.Guests)
FROM Table1 AS t 
您可以将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的描述:

Left join将返回使用Left join尝试使用NULL的列,但这会将NULL放在字段中。我不需要空值。如果发起人在表2中没有人,我需要表1中的计数。这只给出了他们让某人进来时的总数,但不包括他们的来宾列表条目。这与COALESCE的问题相同。如果不止一个人的COUNT字段中有某个内容,但在表2中没有带有其ID的条目,则只有第一次找到的这些发起人才会显示在您的解决方案中。啊,我忽略了查询中的分组在表2中。如果您将分组更改为“按表1.id分组”会有帮助吗?不会,仍然只会得到一个结果,而我应该得到两个或更多。握住电话-现在它突然工作了!我在promoterID中得到两行NULL,实际上我甚至不需要这个列,因为在这种情况下ID是不相关的,我只需要它们的总计,但是在来宾列中有正确的值。谢谢我将编辑我的原始答案以反映我之前的评论,以便您可以接受实际答案: