我对MySQL / MariaDB查询有一个令人费解的问题,其表结构如下:
事件
报告
reporttemplate 本地化报告模板。类型:事件/事件之前,每种语言
reportvalue
有两种 reporttemplate ,一种用于之前事件(所有事件都有此事件),一种用于之后事件(只有一些)事件有这个)。 之前报告有数十种不同的报告值,报告后的十几个报告值的子集。
问题在于:我如何形成一个查询,为每个事件计算 reportvalue <中报告前后报告的匹配键值对的计数/ strong> -table,当事件存在两种类型的报告时?
答案 0 :(得分:0)
这样的事情应该这样做:
select
e.id
count(before.id),
count(after.id)
from
event e
join reporttemplate before on e.id = before.event_fk and before.type = 'BEFORE'
join reporttemplate after on e.id = after.event_fk and after.type = 'AFTER'
group by
e.id
答案 1 :(得分:0)
感谢您的回复,我打算尝试JOIN路线,但设法通过这个:
select
v1.key,
count(*)
from
reportvalue v1,
reportvalue v2,
report r1,
report r2,
event e
where
e.status = "RESOLVED" // status-column was missing from original question
and r1.event_fk = e.id
and r2.event_fk = e.id
and r1.reporttemplate_fk = [report_template_before_id] // parametrized
and r2.reporttemplate_fk = [report_template_after_id] // parametrized
and v1.report_fk = r1.id
and v2.report_fk = r2.id
and v1.key = v2.key
and v1.value <> v2.value
group by
key;
这似乎为每个事件提供了正确数量的非匹配键值对,这是我真正需要的结果。