现在我有两个数据表 A 和表 B 需要根据B表中的违规时间 人名和日期将对应的违规内容加到A表的对应工作记录表里 如何判断 用left join可以吗
如果left join不行那要如何达到这种效果呢
A表
开始工作时间 | 结束工作时间 | 人名 | 日期 |
---|---|---|---|
11:30 | 12:30 | A | 2022-04-10 |
13:30 | 14:30 | A | 2022-04-10 |
15:30 | 16:30 | A | 2022-04-10 |
17:30 | 18:30 | B | 2022-04-10 |
9:30 | 10:30 | B | 2022-04-10 |
B表
违规时间 | 违规内容 | 人名 | 日期 |
---|---|---|---|
13:50 | 抽烟 | A | 2022-04-10 |
15:50 | 危险驾驶 | A | 2022-04-10 |
15:50 | 抽烟 | B | 2022-04-10 |
效果
工作开始时间 | 工作结束时间 | 姓名 | 日期 | 违规内容 |
---|---|---|---|---|
11:30 | 12:30 | A | 2022-04-10 | |
13:30 | 14:30 | A | 2022-04-10 | 抽烟 |
15:30 | 16:30 | A | 2022-04-10 | 危险操作 |
17:30 | 18:30 | B | 2022-04-10 | 抽烟 |
9:30 | 10:30 | B | 2022-04-10 |
两种方式:
第一种,表B数据更新到表A:
update A
set A.违规内容=ISNULL(B.违规内容,'')
from A
left join B on A.日期=B.日期 and A.姓名=B.姓名 and B.违规时间>=A.工作开始时间 and B.违规时间<=A.工作结束时间
第二种,展示的时候两表关联查询:
select
A.工作开始时间,
A.工作结束时间,
A.姓名,
A.日期,
ISNULL(B.违规内容,'')
from A
left join B on A.日期=B.日期 and A.姓名=B.姓名 and B.违规时间>=A.工作开始时间 and B.违规时间<=A.工作结束时间
以上,为空判断ISNULL是SQLServer写法,mySql用IFNULL,oracle用NVL
若有帮助,请采纳~
可以用left join A表在左边就可以,不用left join也可以,查两张表