无法在 mysql 中正确连接两个表

Can't join two tables properly in mysql

我有这两个table

N-table                          M-table
-----------------------------    -----------------------------
| date       | id | n-value |    | date       | id | m-value |
|------------|----|---------|    |------------|----|---------|
| 2015-08-01 | 7  | 100     |    | 2015-09-01 | 7  | 200     |
| 2015-09-01 | 8  | 10      |    -----------------------------
-----------------------------

我想像这样加入这两个table

---------------------------------------------------
| date       | id | n-value       | m-value       |
-------------|----|---------------|---------------|
| 2015-08-01 | 7  | 100           | null ( or 0 ) |
| 2015-09-01 | 7  | null ( or 0 ) | 200           |
| 2015-09-01 | 8  | 10            | null ( or 0 ) |
---------------------------------------------------

我做了这个查询:

  SELECT n.date , n.id , n.n-value, m.m-value FROM n
  LEFT JOIN m ON n.id = m.id AND n.date = m.date GROUP BY n.date

但输出不正确:

---------------------------------------------------
| date       | id | n-value       | m-value       |
-------------|----|---------------|---------------|
| 2015-08-01 | 7  | 100           | null          |
| 2015-09-01 | 8  | 10            | null          |
---------------------------------------------------

我的查询有什么问题?

如果您使用的是 ANSI SQL RDBMS,那么您会:

SELECT n.date , n.id, m.id , n.n-value, m.m-value FROM n
  FULL OUTER JOIN m ON n.id = m.id AND n.date = m.date GROUP BY n.date

当没有匹配项时,这会从 table 中选择结果。

左外连接获取左侧的所有项目并包括右侧没有匹配项的空值,而右外连接则相反。全包两面。

请注意,您还需要在 "expected" table 的中间行包括 m.id,没有 n.id。

但是,正如指出的那样,mySQL 不支持完全外部联接,因此您可以使用(如以下评论中的 link 所述)

SELECT n.date , n.id, n.n-value, m.m-value FROM n
  LEFT JOIN m ON n.id = m.id AND n.date = m.date GROUP BY n.date
UNION
SELECT m.date , m.id , n.n-value, m.m-value FROM n
  RIGHT JOIN m ON n.id = m.id AND n.date = m.date GROUP BY n.date

您应该告诉查询将正确的 table 内容放在顶行,但按您希望的方式组织。