Mysql 用于从具有不同外键的单个表中检索匹配值对计数的SQL查询?
我对MySQL/MariaDB查询有一个令人费解的问题,表结构如下: 事件Mysql 用于从具有不同外键的单个表中检索匹配值对计数的SQL查询?,mysql,sql,mariadb,Mysql,Sql,Mariadb,我对MySQL/MariaDB查询有一个令人费解的问题,表结构如下: 事件 idINT(11) 时间日期时间 说明VARCHAR(1000) 报告 idINT(11) 事件\u fkINT(11)指事件 reporttemplate\u fkINT(11)指的是reporttemplate 报告模板本地化报告模板。类型:事件前/事件后,每种语言 idINT(11) 类型VARCHAR(255) nameVARCHAR(255) 模板VARCHAR(10000) reportvalue
- idINT(11)
- 时间日期时间
- 说明VARCHAR(1000)
- idINT(11)
- 事件\u fkINT(11)指事件
- reporttemplate\u fkINT(11)指的是reporttemplate
- idINT(11)
- 类型VARCHAR(255)
- nameVARCHAR(255)
- 模板VARCHAR(10000)
- 报告\u fkINT(11)指报告
- 键VARCHAR(255)
- 值VARCHAR(255)
问题是:当事件存在两种类型的报告时,如何形成一个查询,为每个事件计算reportvalue表中前后报告的匹配键值对计数?类似的操作应该可以做到:
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
感谢您的回复,我本打算尝试加入路线,但成功地完成了以下任务:
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;
选择
v1.key,
计数(*)
从…起
报告值v1,
reportvalue v2,
报告r1,
报告r2,
事件e
哪里
e、 status=“已解决”//原始问题中缺少状态列
r1.event_fk=e.id
和r2.event_fk=e.id
和r1.reporttemplate_fk=[report_template_before_id]//参数化
和r2.reporttemplate_fk=[report_template_after_id]//参数化
和v1.report_fk=r1.id
和v2.report_fk=r2.id
和v1.key=v2.key
和v1.value v2.value
分组
钥匙
这似乎为每个事件提供了正确数量的不匹配键值对,这就是我在这里真正需要的结果