如何将三张表拼接成一张表?

Posted

技术标签:

【中文标题】如何将三张表拼接成一张表?【英文标题】:How to concatenate three tables into one table? 【发布时间】:2015-08-11 07:29:42 【问题描述】:

Table1 tblUserBadges

uid scenid  badgeid timestamp

u0    s1      b0       t1

u0    s1      b1       t2

u0    s2      b0       t3

u1    s1      b3       t4

u1    s1      b4       t5   

Table2 tblUserWarnings

uid scenid  warningid   timestamp

u0    s1      w0         t1

u0    s1      w1         t2

u0    s2      w2         t3

u1    s1      w3         t4

u1   s1       w4         t5

Table3 tblUserScenScores

uid scenid  score   attempts    timestamp


u0    s1     20       3            t1


u1    s1     22       7            t2

u0    s2     -5       1            t3

结果:Tabl4 viewUserScenariostats

uid scenid  badges   warnings   score   attempts
u0   s1     b0, b1   w0, w1      20       3

u0   s2     b0       w2          -5       1

u1   s1     b3, b4   w3, w4      22       7

我尝试如下查询:

CREATE VIEW viewUserScenarioStats AS 
SELECT  uid.tblUserBadge, GROUP_CONCAT(scenid).tblUserWarnings, 
GROUP_CONCAT( badgeid).tblUserScrores, warningid.tblUserWarnings, score, attempts 

如何连接三个表。 但不工作......有什么帮助吗?

【问题讨论】:

【参考方案1】:

你可以这样做

select s.uid ,
s.scenid,
group_concat(distinct b.badgeid) badges,
group_concat(distinct w.warningid)  `warnings`,
s.score,
s.attempts
from tblUserScenScores s
join tblUserWarnings w on(s.uid = w.uid and s.scenid = w.scenid)
join tblUserBadges b  on(s.uid = b.uid and s.scenid = b.scenid)
group by s.uid ,s.scenid

DEMO

View Demo

【讨论】:

你能告诉我吗?你是怎么做到的?对我有什么建议吗?把你的秘钥给我…… @PrashantTapase 没什么特别的,我刚刚加入了您的表格,然后根据相同的 uid 对结果进行分组,场景中每个分数都有来自徽章和警告表的多行,因此使用 group_concat 我合并了徽章并警告每个分数作为逗号分隔的列表,但 w0、w1 出现的次数超过 1,因此在 group_concat 中添加了不同的选项,以便仅在我认为这对您有意义时才选择相关的警告和徽章

以上是关于如何将三张表拼接成一张表?的主要内容,如果未能解决你的问题,请参考以下文章

获取员工其当前的薪水比其manager当前薪水还高的相关信息

mysql数据迁移

数据库将两张表进行横向连接(拼接成一张表的形式显示)

abap 怎样使两张内表合成一个内表

如果ID存在于第二张或第三张表中,如何从第一张表中高效选择?

SQL多张表如何合并成一张报表?