我有这两个表
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 |
---------------------------------------------------
我的查询有什么问题?
答案 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)
您应该告诉查询将正确的表格内容放在第一行,但是按照您希望的方式进行组织。