我有以下问题,我需要根据其他两个表中给出的规范,在一个表中返回值的多个差异。我很确定这可以通过在正确的位置进行一些内连接来实现。我遇到的最大问题是,可能还有两个以上的值需要进行比较,结果应该总是在一行中返回。
应返回的差异是根据表C中的值计算的,表A中给出了应比较的规格。
下面我给出了一个示例,因为它更容易显示情况和示例返回行。我尝试了许多技巧但没有成功,所以非常感谢你的帮助。
数据库使用MySQL。
提前致谢!
表A:
| identifier | type | top_id
-------------------------------------
| aaaa | X |
| bbbb | Y | aaaa
| cccc | Y | aaaa
| dddd | Y | aaaa
表B:
| identifier | is_base
--------------------------
| bbbb | TRUE
| cccc | FALSE
| dddd | FALSE
表C:
| identifier | type | sub_type | value
----------------------------------------------
| bbbb | A | Q | 100
| cccc | A | Q | 90
| dddd | A | Q | 80
结果:
| top_id | base | diff1_id | diff1_value | diff2_id | diff2_value
-------------------------------------------------------------------------------------
| aaaa | bbbb | cccc | 10 | dddd | 20
答案 0 :(得分:2)
尝试:
select at.top_id,
ct.identifier,
group_concat(concat(cf.identifier,':', ct.value-cf.value)) diffs
from TableA at
join TableB bt on at.identifier = bt.identifier and bt.is_base = 'TRUE'
join TableC ct on bt.identifier = ct.identifier
join TableA af on at.top_id = af.top_id
join TableB bf on af.identifier = bf.identifier and bf.is_base = 'FALSE'
join TableC cf on bf.identifier = cf.identifier
group by ct.identifier
SQLFiddle here。