如何在内部显示NULL或ZERO在两个不同的数据库上加入这两个表?

Sai*_*son 0 mysql

我在2个不同的数据库上有2个表:

db1.table1

+--------------+--------------------------+
| Username     | Message                  |
+--------------+--------------------------+
| jamesbond    | I need some help         |
| jamesbond    | I need some help         |
| jamesbond    | I need some help         |
| jamesbond    | Mission accomplished     |
+--------------+--------------------------+
Run Code Online (Sandbox Code Playgroud)

db2.table2

+--------------------------+--------------+
| Message                  | Status       |
+--------------------------+--------------+
| I need some help         | Ok           |
| I need some help         | Ok           |
| I need some help         | Bad          |
+--------------------------+--------------+
Run Code Online (Sandbox Code Playgroud)

当我使用这种SQL语法'INNER JOIN'那些表时:

SELECT A.Username, A.Message
SUM(CASE WHEN `status` = 'Ok' THEN 1 ELSE 0 END) AS StatOK,
SUM(CASE WHEN `status` = 'Bad' THEN 1 ELSE 0 END) AS StatBAD
FROM db1.table1 as A
INNER JOIN db2.table2 as B 
ON A.Message = B.Message
WHERE A.Username = 'jamesbond'
GROUP BY A.Username, A.Message
Run Code Online (Sandbox Code Playgroud)

我得到了这个结果:

+--------------+--------------------------+--------+---------+
| Username     | Message                  | StatOK | StatBAD |
+--------------+--------------------------+--------+---------+
| jamesbond    | I need some help         | 2      | 1       |
+--------------+--------------------------+--------+---------+
Run Code Online (Sandbox Code Playgroud)

如何获得这样的结果(DB2上仍然没有状态的消息,但SUM结果可以是ZERO或NULL):

+--------------+--------------------------+--------+---------+
| Username     | Message                  | StatOK | StatBAD |
+--------------+--------------------------+--------+---------+
| jamesbond    | I need some help         | 2      | 1       |
| jamesbond    | Mission accomplished     | NULL   | NULL    |
+--------------+--------------------------+--------+---------+
Run Code Online (Sandbox Code Playgroud)

mr_*_*air 5

你需要一个Left Outer Join,它将从Left表中获取行,如果它与Right表不匹配,那么你将获得NULL.

SELECT A.Username, A.Message
SUM(CASE WHEN `status` = 'Ok' THEN 1 ELSE 0 END) AS StatOK,
SUM(CASE WHEN `status` = 'Bad' THEN 1 ELSE 0 END) AS StatBAD
FROM db1.table1 as A
LEFT OUTER JOIN db2.table2 as B 
ON A.Message = B.Message
WHERE A.Username = 'jamesbond'
GROUP BY A.Username, A.Message
Run Code Online (Sandbox Code Playgroud)