我对标题感到抱歉,但找不到正确的措辞。
情境:我得到了一个有两个表的模式:
check_result:
- 节点名称
- requirement_number
- 状态
- 原因
- 来源
验收
- 节点名称
- requirement_number
- 状态
- 原因
- 从
- 有效期至
- 收件人(邮件/姓名…)
因此,我们的想法是显示由check_table中的几个条目组成的检查的状态,其中现有的有效接受"覆盖"了check_table的结果/状态。首先,并非所有信息都是必要的。输出应包含:
requirement_number | status | reason | source/acceptor
我怎样才能做到这一点?
编辑:请求的输出
sec_ora_acceptance | CREATE TABLE `sec_ora_acceptance` (
`node_name` varchar(20) NOT NULL,
`instance_oracle_sid` varchar(20) NOT NULL,
`req_no` int(11) NOT NULL,
`status` enum('OK','NOK','OPEN','NA') NOT NULL,
`reason` text NOT NULL,
`acceptor` varchar(45) NOT NULL,
`acceptor_mail` varchar(50) DEFAULT NULL,
`date` date NOT NULL,
`valid_until` date DEFAULT '9999-12-31',
PRIMARY KEY (`node_name`,`instance_oracle_sid`,`req_no`)
)
sec_ora_result | CREATE TABLE `sec_ora_result` (
`check_id` int(11) NOT NULL,
`req_no` int(11) NOT NULL,
`status` enum('OK','NOK','OPEN','NA') NOT NULL COMMENT 'OK, NOK, OPEN, N(ot)A(pplicable)',
`reason` text,
PRIMARY KEY (`check_id`,`req_no`)
)
编辑#2:请求的信息(示例和结果)
我调整了sec_ora_result中的列,使其更容易(不需要其他表进行比较,只需要两个表)表sec_ora-result:
check_id|req_no|status|reason|node_name|instance_oracle_sid|source
1|1|OPEN|Could not be tested automatically|abc|ora1|automatic_security_test
2|4|OK|Software Version is OK|abc|ora1|automatic_security_test
3|5|NOK|There is a Problem|abc|ora1|autotic_security_test
表sec_ora_acceptance:
node_name|instance_oracle_sid|req_no|status|reason|acceptor|acceptor_mail|date|valid_until
abc|ora1|1|OK|Manual proof|Markus|markus@email.com|2014-02-20|9999-12-31
现在的结果应该包括以下
req_no|status|reason|source
1|OK|Manual proof|Markus
4|OK|Software Version is OK|automatic_security_test
5|NOK|There is a Problem|automatic_security_test
问候Markus
编辑:据我所知,你会需要这样的东西。。。
SELECT SR.req_no,
ISNULL( SA.status, SR.status) as Status,
ISNULL( SA.reason, SR.reason) as Reason,
ISNULL( SA.acceptor, SR.source) as Source
FROM sec_ora_result SR
left join sec_ora_acceptance SA on SA.req_no = SR.req_no
请注意,我们可以使用ISNULL,因为status、reason和receiver都不是NULL,所以如果它们是NULL,则意味着整行都是NULL,然后我们可以使用SR字段,但是,如果这些字段中的任何一个可能是NULL,则当SA.req_no为NULL时,您需要一个常规的CASE,然后Field1 else Field2结束。
此外,请查看用于左联接的键,不确定是否仅通过req_no进行筛选,或者是否还需要其他内容。。。