PSQL:组合两个数据库表并保留空值

时间:2015-07-16 13:18:34

标签: sql database postgresql join null

我在Postgres数据库中有两个表。我们称之为Results1和Results2。 它们包含服务器上的数据。

Results1看起来像这样:

Hostname | Name | SystemID | IPAddress | LastCheckin | OSAStatus
----------------------------------------------------------------
aaaa.com | aaaa | 0000001  | xx.xxx.x  | 20150714    | online
bbbb.com | bbbb | 0000002  | xx.xxx.y  | 20150713    | offline
cccc.com | cccc | 0000003  | xx.xxx.z  | 20150614    | online
xxxx.net | xxxx | 0000004  | xx.xxx.1  | 20130301    | unknown

它目前不包含任何空值,但将来可能会有它。

表格Results2看起来像这样:

Hostname | Name | IPAddress | InventoryDate | Status
----------------------------------------------------------------
aaaa.com | aaaa | xx.xxx.x  | 20130714      | Retired
bbbb.com | bbbb | xx.xxx.y  |               | RunTime
cccc.com | cccc |           | 20150614      | RunTime
         | dddd | xx.xxx.a  | 20150614      | Planned
eeee.com | eeee | xx.xxx.b  |               | Installation
ffff.com | ffff | xx.xxx.c  |               | Retired
gggg.com | gggg | xx.xxx.d  | 20150614      | RunTime

我想要做的是组合/加入这两个表,以便我可以比较数据。 我想在Name上加入它们,因为这是表中唯一不能为空的公共值。

我尝试了以下SELECT语句:

SELECT Results1.Name, SystemID, LastCheckin, InventoryDate, OSAStatus, Status AS R1Status
FROM Results1
FULL OUTER JOIN
Results2 
ON Results1.Name=Results2.Name
ORDER BY Name;

它部分地做了我想要的,但不完全。我得到的结果是这样的:

Name | SystemID | LastCheckin | InventoryDate | OSAStatus | R1Status
----------------------------------------------------------------
aaaa | 0000001  | 20130714    | 20130714      |  online   | Retired
bbbb | 0000002  | 20150713    |               |  offline  | RunTime
cccc | 0000003  | 20150614    | 20150616      |  online   | RunTime
xxxx | 0000004  | 20130301    |               |  unknown  |
     |          |             |               |           | Planned
     |          |             |               |           | Installation
     |          |             |               |           | Retired
     |          |             | 20150614      |           | RunTime

如你所见。当服务器仅存在于Results2中而不存在于Results1中时,我松开了该服务器的Name属性,这是一个大问题。 如果服务器同时存在于Results1和Results2中,或者仅存在于Results1中,则它也可以按我的意愿运行。

我知道我只选择Results1.Name,但我不知道如何处理它们而不将它们放在不同的列中。

任何人都可以帮我处理PSQL查询吗?

0 个答案:

没有答案