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