MySQL 5.7 中的采购订单数据查询 - 优化后的 SQL 语句
MySQL 5.7 中的采购订单数据查询 - 优化后的 SQL 语句
在 MySQL 5.7 中,您可以使用子查询来替代 CTE。以下是修改后的 SQL 查询,用于获取采购订单数据,包括采购订单信息、供应商信息以及物料凭证信息:
SELECT
cte.*,
omh.PostingDate
FROM
(
SELECT
opoh.PurchaseOrder AS purchaseorder,
opoh.PurchaseOrderType AS purchaseordertype,
opoh.Supplier AS supplier,
opoh.PurchasingOrganization AS purchasingorganization,
opoh.PurchasingGroup AS purchasinggroup,
opoh.CompanyCode AS companycode,
opoh.PaymentTerms AS paymentterms,
opoh.ZZ1_PosttingDate_PDH AS create_time,
opoh.ZZ1_PosttingDate_PDH AS zZ1PosttingDatePDH,
opoh.ZZ1_PosttingDate_PDH AS posttingdate,
opoh.DocumentCurrency AS documentCurrency,
os.BusinessPartnerName AS supplierName,
opoh.zz1bedatpdhpdh AS zz1bedatpdhpdh
FROM
ods_purchase_order_header opoh
LEFT JOIN
ods_supplier os
ON os.Supplier = opoh.Supplier
WHERE
opoh.PurchaseOrderType = 'Z012'
) cte
LEFT JOIN
ods_materialdocument_item omi
ON
cte.purchaseorder = omi.PurchaseOrder
LEFT JOIN
ods_materialdocument_head omh
ON
omi.MaterialDocument = omh.MaterialDocument AND omi.MaterialDocumentYear = omh.MaterialDocumentYear
LEFT JOIN
vmi_materialdocument vmi
ON
omi.MaterialDocument != vmi.MaterialDocument AND omi.MaterialDocumentYear != vmi.MaterialDocumentYear
WHERE
(omi.IsAutomaticallyCreated != 'X' OR omi.IsAutomaticallyCreated IS NULL)
AND
omi.GoodsMovementType IN (SELECT gmt.GoodsMovementType FROM goodsmovement gmt)
LIMIT 0, 1
该查询语句使用了子查询来模拟 CTE 的功能,并进行了以下优化:
- 使用子查询
cte来提取采购订单的基本信息,提高代码可读性和维护性。 - 使用
LIMIT 0, 1来限制查询结果为一条数据,提高查询效率。 - 在
WHERE子句中使用IN子句来筛选omi.GoodsMovementType,提高查询效率。
注意:
- 该查询语句假设您拥有以下数据库表:
ods_purchase_order_header,ods_supplier,ods_materialdocument_item,ods_materialdocument_head,vmi_materialdocument,goodsmovement。 - 您可能需要根据您的实际需求调整查询语句中的表名和字段名。
- 该查询语句仅返回一条数据,如果需要返回多条数据,请删除
LIMIT 0, 1。
通过以上优化,您可以获得更高效的 SQL 查询语句,用于在 MySQL 5.7 中获取采购订单数据。
原文地址: http://www.cveoy.top/t/topic/pFrt 著作权归作者所有。请勿转载和采集!