一个mysql中的多个查询(是否使用数据表)

时间:2018-10-17 13:19:30

标签: php mysql sql datatable

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

主体表:

P(T_P, T, P, title)

另外2个表与T_P链接:

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

另一个表D,带有一个TYPE参数。

在我的结果中,我希望基于3种类型有3列。

为了显示,我将数据表与服务器端处理一起使用,因为P表具有500.000行。

实际上,在没有数据表的情况下,我使用了 4 个不同的查询:

  • 用于获取表P,表D和表E参数的一个。
  • 一个用于获取类型为A的表D的人
  • 一个用于获取类型B和
  • 的表D的对象
  • 一个用于获取类型为C的表D的人。

这些工作很好,但是我需要使用数据表。

我不知道我是否足够清楚,所以我画了一个小图。

All examples

2 个答案:

答案 0 :(得分:3)

这应该使您接近所需的内容。请问您为什么不在表/列中使用冗长的名称?您只是在创造自己的生活,接下来接手这个项目的人的生活就会更加困难。

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'

enter image description here

答案 1 :(得分:0)

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