我有两个创建这些表的子查询:
date | name | data x
-----------+------+-------
2013-07-01 | a | 2
2013-07-01 | c | 3
2013-07-01 | d | 1
date | name | data y
-----------+------+-------
2013-07-01 | a | 13
2013-07-01 | b | 16
2013-07-01 | d | 20
我想使用日期和名称作为连接条件进行完全连接。(日期不限于 2013-07-01,所以实际上日期字段和名称字段组合在一起形成了一个唯一的伪标识符字段。)
理想情况下,结果应该类似于:
date | name | data x | data y
-----------+------+--------+-------
2013-07-01 | a | 2 | 13
2013-07-01 | b | | 16
2013-07-01 | c | 3 |
2013-07-01 | d | 1 | 20
(最好我可以为 null 输入零,但这可以稍后处理。)
我使用了与此类似的查询:
select
table1.date, table1.name, table1.dataX, table2.dataY
from table1
full join table2 on table1.date=table2.date and table1.name=table2.name
Postgres 仅引入两个表中都存在的字段(因此在此示例中仅包含名称为 a 和 c 的行),这确实破坏了完全连接的意义。
我尝试了不同的故障排除方法,到目前为止唯一有效的方法是:
select
table1.date, table2.date, table1.name, table2.name, table1.dataX, table2.dataY
from table1
full join table2 on table1.date=table2.date and table1.name=table2.name
返回:
date |date | name | name | data x | data y
-----------+------------+------+------+--------+-------
2013-07-01 | 2013-07-01 | a | a | 2 | 13
| 2013-07-01 | | b | | 16
2013-07-01 | | c | | 3 |
2013-07-01 | 2013-07-01 | d | d | 1 | 20
当我使用数据时,有一些解决方法可以使这项工作有效,但实际上并不理想。有什么方法可以使查询返回所需的结果?
这里掉了不少头发。非常感谢!