我有两个表PROJECT
和POST_PROJECT
,它们由公共列PID
连接。
PROJECT(PID,HOSTNAME,STATUS)
POST_PROJECT(PID,HOSTNAME,POST_STATUS)
在某些情况下,PROJECT
表中的主机名记录在POST_PROJECT
表中不存在,如下所示,
项目:
(1,'HOST1','SUCCESS'),(1,'HOST2','FAIL')
PID, HOSTNAME, STATUS
1 HOST1 SUCCESS
1 HOST2 FAIL
POST_PROJECT:
(1,'HOST1','FAIL')
PID, HOSTNAME, POST_STATUS
1 HOST1 FAIL
在这种情况下,我需要一个单一的查询,我必须显示两个表的所有列的值为NULL,如果主机名不存在于POST_PROJECT表如下,
(1,'HOST1','SUCCESS',1,'HOST1','FAIL')
(1,'HOST2','FAIL',1,NULL,NULL)
PID, HOSTNAME, STATUS, POST HOSTNAME, POST_STATUS
1 HOST1 SUCCESS HOST1 FAIL
1 HOST2 FAIL NULL NULL
预期成果:
PID,PROJECT_HOSTNAME,PROJECT_STATUS,PID,POST_PROJECT_HOSTNAME,POST_PROJECT_STATUS
(1,'HOST1','SUCCESS',1,'HOST1','FAIL')
(1,'HOST2','FAIL',1,NULL,NULL)
PID, HOSTNAME, STATUS, POST HOSTNAME, POST_STATUS
1 HOST1 SUCCESS HOST1 FAIL
1 HOST2 FAIL NULL NULL
实际结果:
PID,PROJECT_HOSTNAME,PROJECT_STATUS,PID,POST_PROJECT_HOSTNAME,POST_PROJECT_STATUS
(1,'HOST1','SUCCESS',1,'HOST1','FAIL')
(1,'HOST2','FAIL',1,'HOST1','FAIL')
PID, HOSTNAME, STATUS, POST HOSTNAME, POST_STATUS
1 HOST1 SUCCESS HOST1 FAIL
1 HOST2 FAIL HOST1 FAIL
1条答案
按热度按时间aydmsdu91#
正如在评论中提到的,你需要一个
LEFT JOIN
左联接获取第一个表(联接左侧)中的所有记录,并联接右表中的任何匹配记录。
您的
PID
和HOSTNAME
列基本上构成了您的键,因此您需要将它们都包含在连接条件中。此外,请确保您的列选择选择您想要的数据与正确的列名。您的
post_project
表的主机名需要一个别名才能获得所需的结果