1.问题
最近,发现车间在使用条码打印系统打印的时候,为了打印条码,从系统生产任务单中一个一个复制到EXCEL表中,然后根据事先设置的模板进行批量打印,这种重复性的CTRL+C和CTRTL+V不但效率低,而且还容易出错。
通过查看,数据库系统为POSTGRESQL10.0,相关的数据表有三个,分别为mrpproduction、stockproductionlot、producttemplate,它们的表结构和内容如下:
生产单表(mrp_production):
产品序列号表(stockproductionlot):
产品名称规格表(product_template):
其中:
在mrpproduction表中,字段finallotid与stockproduction_lot表中字段id关联;
在mrpproduction表中,字段productid与stockproductionlot表中字段id关联。
现在要通过查询指定日期范围内的生产单,它所对应的产品批次号是多少,同时查询出对应的产品名称。
2.实现方法
SELECT
A.NAME,
C.NAME,
C.nc_model,
C.nc_specification,
B.NAME,
--A .final_lot_id,
--A .product_id,
A.create_date
FROM
mrp_production AS A
LEFT JOIN stock_production_lot AS B ON A .final_lot_id = B.ID
LEFT JOIN product_template AS C ON A .product_id = C.ID
WHERE A.create_date BETWEEN '2020-06-18 12:00:00' AND '2020-06-24 23:59:59'
ORDER BY A.ID ASC;
改一下查询条件:
SELECT
A.NAME,
C.NAME,
C.nc_model,
C.nc_specification,
B.NAME,
--A .final_lot_id,
--A .product_id,
A.create_date
FROM
mrp_production AS A
LEFT JOIN stock_production_lot AS B ON A .final_lot_id = B.ID
LEFT JOIN product_template AS C ON A .product_id = C.ID
WHERE A.create_date
BETWEEN
(SELECT current_timestamp - interval '11 day')
AND current_timestamp
ORDER BY A.ID ASC;
3.实现结果
4.join、left join、right join、fulljoin间的区别
1)INNER JOIN 关键字在表中存在至少一个匹配时返回行。
2)LEFT JOIN 关键字从左表(table1)返回所有的行,即使右表(table2)中没有匹配。如果右表中没有匹配,则结果为 NULL。
3)RIGHT JOIN 关键字从右表(table2)返回所有的行,即使左表(table1)中没有匹配。如果左表中没有匹配,则结果为 NULL。
4)FULL OUTER JOIN 关键字只要左表(table1)和右表(table2)其中一个表中存在匹配,则返回行。FULL OUTER JOIN 关键字结合了 LEFT JOIN 和 RIGHT JOIN 的结果。
5.后记
上面问题只是解决了数据库的查询问题,如何实现自动化的导出,下一内容将分享PYTHON操作EXCEL相关的部分。
学习|生活|分享|积累|永不停步
请留下你指尖的温度
让太阳拥抱你
微信ID:haopython