如何将两个表也完全连接为空值?
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
我正在使用 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