我对标题感到抱歉,但我找不到正确的措辞。
情况:我有一个包含两个表的架构:
检查结果:
- 节点名称
- requirement_number
- 状态
- 原因
- 来源
接受
- 节点名称
- requirement_number
- 状态
- 原因
- valid_from
- 有效期至
- 接受者(邮件/姓名...)
因此,我们的想法是显示由 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
问候 马库斯
最佳答案
编辑: 据我了解,那么你需要这样的东西......
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,因为状态、原因和接受者都不为空,因此如果它们为 NULL,则意味着整行为 NULL,然后我们可以采用 SR 字段,但是,如果这些字段中的任何一个可能为空,那么你需要一个常规的 CASE WHEN SA.req_no 为 null then Field1 else Field2 end。
另外,看看用于左连接的键,不确定您是否仅通过 req_no 进行过滤,或者您还需要其他内容...
关于mysql - 用于显示临时状态的 SELECT 语句(两个表),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21910406/