前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用LEFT JOIN实现多表查询

使用LEFT JOIN实现多表查询

原创
作者头像
好派笔记
修改2021-09-14 14:52:42
1.1K0
修改2021-09-14 14:52:42
举报
文章被收录于专栏:好派笔记好派笔记
1.问题

最近,发现车间在使用条码打印系统打印的时候,为了打印条码,从系统生产任务单中一个一个复制到EXCEL表中,然后根据事先设置的模板进行批量打印,这种重复性的CTRL+C和CTRTL+V不但效率低,而且还容易出错。

通过查看,数据库系统为POSTGRESQL10.0,相关的数据表有三个,分别为mrp_production、stock_production_lot、product_template,它们的表结构和内容如下:

生产单表(mrp_production):

使用LEFT JOIN实现多表查询
使用LEFT JOIN实现多表查询

产品序列号表(stock_production_lot):

使用LEFT JOIN实现多表查询
使用LEFT JOIN实现多表查询

产品名称规格表(product_template):

使用LEFT JOIN实现多表查询
使用LEFT JOIN实现多表查询

其中:

在mrp_production表中,字段final_lot_id与stock_production_lot表中字段id关联;

在mrp_production表中,字段product_id与stock_production_lot表中字段id关联。

现在要通过查询指定日期范围内的生产单,它所对应的产品批次号是多少,同时查询出对应的产品名称。

2.实现方法
  1. SELECT
  2.     A.NAME,  
  3.     C.NAME,  
  4.     C.nc_model,  
  5.     C.nc_specification,  
  6.     B.NAME,  
  7. --A .final_lot_id,
  8. --A .product_id,
  9.     A.create_date  
  10. FROM
  11.     mrp_production AS A  
  12. LEFT JOIN stock_production_lot AS B ON A .final_lot_id = B.ID  
  13. LEFT JOIN product_template AS C ON A .product_id = C.ID  
  14. WHERE A.create_date BETWEEN '2020-06-18 12:00:00' AND '2020-06-24 23:59:59'  
  15. ORDER BY A.ID ASC;  

改一下查询条件:

  1. SELECT
  2.     A.NAME,  
  3.     C.NAME,  
  4.     C.nc_model,  
  5.     C.nc_specification,  
  6.     B.NAME,  
  7. --A .final_lot_id,
  8. --A .product_id,
  9.     A.create_date  
  10. FROM
  11.     mrp_production AS A  
  12. LEFT JOIN stock_production_lot AS B ON A .final_lot_id = B.ID  
  13. LEFT JOIN product_template AS C ON A .product_id = C.ID  
  14. WHERE A.create_date  
  15. BETWEEN
  16.     (SELECT current_timestamp - interval '11 day')  
  17. AND current_timestamp
  18. ORDER BY  A.ID ASC;  
3.实现结果
使用LEFT JOIN实现多表查询
使用LEFT JOIN实现多表查询
4. join、left join、right join、fulljoin间的区别

1)INNER JOIN 关键字在表中存在至少一个匹配时返回行。

使用LEFT JOIN实现多表查询
使用LEFT JOIN实现多表查询

2)LEFT JOIN 关键字从左表(table1)返回所有的行,即使右表(table2)中没有匹配。如果右表中没有匹配,则结果为 NULL。

使用LEFT JOIN实现多表查询
使用LEFT JOIN实现多表查询

3)RIGHT JOIN 关键字从右表(table2)返回所有的行,即使左表(table1)中没有匹配。如果左表中没有匹配,则结果为 NULL。

使用LEFT JOIN实现多表查询
使用LEFT JOIN实现多表查询

4)FULL OUTER JOIN 关键字只要左表(table1)和右表(table2)其中一个表中存在匹配,则返回行。FULL OUTER JOIN 关键字结合了 LEFT JOIN 和 RIGHT JOIN 的结果。

使用LEFT JOIN实现多表查询
使用LEFT JOIN实现多表查询
5.后记

上面问题只是解决了数据库的查询问题,如何实现自动化的导出,下一内容将分享PYTHON操作EXCEL相关的部分。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.问题
  • 2.实现方法
  • 3.实现结果
  • 4. join、left join、right join、fulljoin间的区别
  • 5.后记
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档