mariadb 单个Mysql查询显示多个列NULL,如果这些值不在另一个表中

wlsrxk51  于 7个月前  发布在  Mysql
关注(0)|答案(1)|浏览(60)

我有两个表PROJECTPOST_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
aydmsdu9

aydmsdu91#

正如在评论中提到的,你需要一个LEFT JOIN
左联接获取第一个表(联接左侧)中的所有记录,并联接右表中的任何匹配记录。
您的PIDHOSTNAME列基本上构成了您的键,因此您需要将它们都包含在连接条件中。
此外,请确保您的列选择选择您想要的数据与正确的列名。您的post_project表的主机名需要一个别名才能获得所需的结果

SELECT project.pid,
    project.hostname,
    project.status,
    post_project.hostname as post_hostname,
    post_project.post_status
FROM project
LEFT JOIN post_project
    ON project.pid = post_project.pid
    AND project.hostname = post_project.hostname

相关问题