Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 用于从具有不同外键的单个表中检索匹配值对计数的SQL查询?_Mysql_Sql_Mariadb - Fatal编程技术网

Mysql 用于从具有不同外键的单个表中检索匹配值对计数的SQL查询?

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

我对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

  • 报告\u fkINT(11)指报告
  • VARCHAR(255)
  • VARCHAR(255)
有两种类型的报告模板s,一种用于事件前的(所有事件都有该模板),另一种用于事件后的(只有一些事件有该模板)。报告之前的有几十个不同的报告值,报告之后的有十几个报告值的子集


问题是:当事件存在两种类型的报告时,如何形成一个查询,为每个事件计算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
分组
钥匙
这似乎为每个事件提供了正确数量的不匹配键值对,这就是我在这里真正需要的结果