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

时间:2015-09-07 15:53:35

标签: mysql join left-join missing-data

我有这两个表

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      |    -----------------------------
-----------------------------

我想像这样加入这两个表

---------------------------------------------------
| 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          |
---------------------------------------------------

我的查询有什么问题?

2 个答案:

答案 0 :(得分:1)

如果你使用的是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

如果没有匹配,则会从两个表中选择结果。

左外连接从左侧获取所有项目,并包括空值,其中右侧和右外侧连接不相反。完整包括双方。

请注意,您还需要在"预期"中间行中包含m.id。表,没有n.id。

然而,正如所指出的那样,mySQL不支持完全外连接,所以你可以使用(如下面评论中的链接所示)

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

答案 1 :(得分:0)

您应该告诉查询将正确的表格内容放在第一行,但是按照您希望的方式进行组织。