我在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查询吗?