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

时间:2015-06-25 13:08:41

标签: mysql sql mariadb

我对MySQL / MariaDB查询有一个令人费解的问题,其表结构如下:

事件

  • id INT(11)
  • 时间 DATETIME
  • 说明 VARCHAR(1000)

报告

  • id INT(11)
  • event_fk INT(11)指事件
  • reporttemplate_fk INT(11)引用reporttemplate

reporttemplate 本地化报告模板。类型:事件/事件之前,每种语言

  • id INT(11)
  • 输入 VARCHAR(255)
  • 名称 VARCHAR(255)
  • 模板 VARCHAR(10000)

reportvalue

  • report_fk INT(11)参考报告
  • VARCHAR(255)
  • VARCHAR(255)

有两种 reporttemplate ,一种用于之前事件(所有事件都有此事件),一种用于之后事件(只有一些)事件有这个)。 之前报告有数十种不同的报告值,报告后的十几个报告值的子集。

问题在于:我如何形成一个查询,为每个事件计算 reportvalue <中报告前后报告的匹配键值对的计数/ strong> -table,当事件存在两种类型的报告时?

2 个答案:

答案 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;

这似乎为每个事件提供了正确数量的非匹配键值对,这是我真正需要的结果。