在我的数据库中,我有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 个不同的查询:
这些工作很好,但是我需要使用数据表。
我不知道我是否足够清楚,所以我画了一个小图。
答案 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'
答案 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