MySQL 根据条件连接表,mysql查询根据多个条件连接4个表

本文介绍了一种在MySQL中实现多表联合查询的方法,旨在显示部门内每位员工的培训状态及日期。通过使用LEFT OUTER JOIN及CASE WHEN语句,实现了对员工是否已完成特定课程的查询,并针对未完成的情况进行标记。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我在mysql中有四个表,如下所示:

我想要做的是将表格连在一起,以显示是否已经为部门中的每个用户进行了培训,如果已经完成,则显示培训日期,否则说需要培训.

所以部门财务的期望输出将是这样的:

我尝试使用下面的代码,但连接变得不准确和无效.

select o.person, o.job, j.risk, r. training,c.course,

c.person,c.datecompleted

from orgstructure o

left outer join jobsrisks j

on o.job=j.job

left outer join risktraining r

on j.risk=r.risk

left outer join coursescompleted c

on o.person=c.person

where o.department='finance'

我应该将多个选择查询嵌入到一个中吗?任何帮助表示赞赏.

解决方法:

我猜这个问题是你将orgstructure加入到仅由人完成的课程中,我认为你还需要参加培训:

select o.person,

o.job,

j.risk,

r.training,

c.course,

c.person,

c.datecompleted

from orgstructure o

left outer join jobsrisks j

on o.job=j.job

left outer join risktraining r

on j.risk=r.risk

left outer join coursescompleted c

on o.person=c.person

and r.training = c.course --- add this

where o.department='finance'

如果该人已完成与该工作相关的每个风险的课程,您需要加入此人.

将整个查询放在一起您将拥有:

select o.person,

o.job,

j.risk,

r.training,

case when c.course is null then 'no' else 'yes' end TrainingCompleted,

coalesce(c.datecompleted, 'n/a') datecompleted

from orgstructure o

left outer join jobsrisks j

on o.job=j.job

left outer join risktraining r

on j.risk=r.risk

left outer join coursescompleted c

on o.person=c.person

and r.training = c.course

where o.department='finance'

结果是:

| PERSON | JOB | RISK | TRAINING | TRAININGCOMPLETED | DATECOMPLETED |

-------------------------------------------------------------------------------------------------------------------------------

| taylor chetty | manager | safety | induction course | no | n/a |

| taylor chetty | manager | security | security course | no | n/a |

| bill thompson | data clerk | bad posture | personal wellbeing course | no | n/a |

| bill thompson | data clerk | repetitive strain injury | nursing course | yes | 2000-04-13 00:00:00 |

| bill thompson | data clerk | safety | induction course | yes | 2007-12-04 00:00:00 |

| ann brown | data clerk | bad posture | personal wellbeing course | no | n/a |

| ann brown | data clerk | repetitive strain injury | nursing course | no | n/a |

| ann brown | data clerk | safety | induction course | no | n/a |

标签:mysql,join

来源: https://codeday.me/bug/20190714/1461055.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值