一个mysql中的多个查询(是否使用datatable)

vd8tlhqk  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(355)

在我的数据库中有4个表:
主表:

P(T_P, T, P, title)

以及其他2个与t\u p的表链接:

E(T_P, EE, AA, BB)
G(T_P, CC, DD, EE)

还有一张table D ,带有 TYPE 争论。
在我的结果中,我希望有3列基于3类型。
为了显示,我使用带有服务器端处理的datatable,因为 P 表有500.000行。
实际上,如果没有datatable,我会使用4种不同的查询:
一个用于获取表p、表d和表e参数。
一个用于获取a型表d
一个用于获取b型表d和
一个用于获取c型表d。
这些工作很好,但我需要使用datatable。
我不知道我是否足够清楚,所以我画了一个小模式。

2exbekwf

2exbekwf1#

这会让你接近你所需要的。我能问一下为什么不为表/列使用详细的名称吗?你只是在创造你自己的生活,下一个接手这个项目的人的生活要艰难得多。

SELECT tP.T_P,
       tP.T,
       tP.P,
       tP.Title,
       tE.EE,
       tG.CC,
       tDa.X AS A,
       tDb.X AS B,
       tDc.X AS C
FROM P AS tP
LEFT JOIN E AS tE ON tP.T_P = tE.T_P
LEFT JOIN G AS tG ON tP.T_P = tG.T_P
LEFT JOIN D AS tDa ON tP.T = tDa.T AND tP.P = tDa.P AND tDa.Type = 'A'
LEFT JOIN D AS tDb ON tP.T = tDb.T AND tP.P = tDb.P AND tDb.Type = 'B'
LEFT JOIN D AS tDc ON tP.T = tDc.T AND tP.P = tDc.P AND tDc.Type = 'C'

nue99wik

nue99wik2#

SELECT P.T_P,
       P.T,
       P.P,
       P.Title,
       E.EE,
       G.CC,
       MAX(CASE WHEN D.Type = 'A' THEN X END) as A,
       MAX(CASE WHEN D.Type = 'B' THEN X END) as B,
       MAX(CASE WHEN D.Type = 'C' THEN X END) as C
FROM P 
LEFT JOIN E ON P.T_P = E.T_P
LEFT JOIN G ON P.T_P = G.T_P
LEFT JOIN D ON P.T = D.T 
         AND P.P = D.P 
GROUP BY 
       P.T_P,
       P.T,
       P.P,
       P.Title,
       E.EE,
       G.CC

相关问题