如何将两个表也完全连接为空值?

How to full join the two tables with the null values as well?

我正在使用 MySQL 5.5 Command Line Client

我想要的:

我最后尝试的是:

SELECT e.event_id,e.title,e.description,e.event_date,e.image, sum(d.amount) as total,count(d.event_id) as total_donors FROM event e,donation d where d.event_id = e.event_id group by e.event_id;

这加入了 table 但我也想要空值,我如何修改它以获得所需结果的最后一行 table(在附图中)?

另外,这种类型的连接叫什么?

谢谢。

您的查询只需要像这样使用 LEFT JOIN 进行转换:

SELECT e.event_id,e.title,e.description,e.event_date,e.image, 
       /*1*/
       sum(ifnull(d.amount,0)) as total,
       count(d.event_id) as total_donors 
FROM event e 
/*2*/
LEFT JOIN donation d 
/*3*/
ON d.event_id = e.event_id 
group by e.event_id;

观察上面查询中的以下标记:

/*1*/ 将求和运算中的ifnull 添加到return 0 而不是null。如果 sum 中的值之一为空,这也将防止空结果。

/*2*/ 将逗号连接更改为 LEFT JOIN 特别是因为您希望显示左侧 table 的所有行,尽管右侧 table 中没有匹配项。

/*3*/where 更改为 ON

这是一个 fiddle 演示:https://dbfiddle.uk/?rdbms=mysql_5.5&fiddle=723cc34b7b875111701d9134b443f39b