需要写一个语句,把两张表拼在一起,最好能用union

第一张表 意见表image.png

第二张表 意见表

image.png

第三张表 拼在一起

image.png

现在需要写一个语句,把两张表拼在一起

第一张表是报修单,字段有 报修人 bxr,报修日期 bxrq,报修内容描述 bxnrms,报修状态 tbzt,报修单号 bxdh

第二张表是意见单,字段有 意见建议人 yjjyr,建议日期jyrq,建议内容描述 jjnr,建议状态 jyzt,意见建议单号 yjjydh

第一张表与第二张表相同的部分是报修人 bxr = 意见建议人 yjjyr,报修日期 bxrq=意见建议日期 jyrq

但是现在这个拼在一起的表会有几个情况:

1、当这个填写的人,既填写了报修单也填写了意见单时,拼在一起的表一定是报修人 bxr = 意见建议人 yjjyr,报修日期 bxrq=意见建议日期 jyrq

2、当这个人没有填写报修单或者意见单时,这个表格只会显示一个部分的内容,另一个部分的表格为空

要求:1、要按照报修日期和建议日期排序

2、如果两个表格都填写了,一定要保证报修人 bxr = 意见建议人 yjjyr,报修日期 bxrq=意见建议日期 jyrq

3、如果只写了一个表格,那么也要让他按照时间排序,即bxrq报修日期,jyrq 意见建议日期

之前我写了语句是可以呈现第一种情况的,但是无法正确的显示单独只填写一个表的情况,而且日期排序也很凌乱,领导说最好使用union而且什么if判断之类的

(SELECT * FROM bb_hqb_db_tb d LEFT JOIN bb_hqb_yjjyb_tb y 

ON d.bxr=y.yjjyr order by d.bxrq desc)

union 

(SELECT * FROM bb_hqb_db_tb d right JOIN bb_hqb_yjjyb_tb y 

ON d.bxr=y.yjjyr order by y.jyrq desc)

FineReport SQL 帆软用户PuLI1nixsF 发布于 2022-8-3 15:46
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共2回答
最佳回答
0
yzm339714Lv6中级互助
发布于2022-8-3 15:53(编辑于 2022-8-3 16:32)

select * from (

(SELECT * FROM bb_hqb_db_tb d LEFT JOIN bb_hqb_yjjyb_tb y 

ON d.bxr=y.yjjyr and d.bxrq = y.jyrq )

union 

(SELECT * FROM bb_hqb_db_tb d right JOIN bb_hqb_yjjyb_tb y 

ON d.bxr=y.yjjyr and d.bxrq = y.jyrq where d.bxr is null )) a

order by  UNIX_TIMESTAMP(case when bxrq is null then jyrq else bxrq end) desc

最佳回答
1
Z4u3z1Lv6专家互助
发布于2022-8-3 15:49

领导乱指挥 这那是union哦

应该是left/right inner join哦

  • 帆软用户PuLI1nixsF 帆软用户PuLI1nixsF(提问者) 表链接是吧
    2022-08-03 15:53 
  • Z4u3z1 Z4u3z1 回复 帆软用户PuLI1nixsF(提问者) 是的,根据描述 主表应该是保修单 简单示例:SELECT * FROM 保修单 A LEFT JOIN 意见单 B ON A.bxr =B.yjjyr AND A.bxrq=b.jyrq where ............
    2022-08-03 15:59 
  • 2关注人数
  • 283浏览人数
  • 最后回答于:2022-8-3 16:32
    请选择关闭问题的原因
    确定 取消
    返回顶部