SQL语句优化:SELECT MAX(b.qc_end_time,a.mian_reason,a.product_skc_id) 错误分析及修改
SELECT MAX(b.qc_end_time,a.mian_reason,a.product_skc_id from erp_pdd_stock_assessment a left join erp_pdd_qc_bill b on a.id = b.assessment_id and b.product_skc_id = a.product_skc_id group by a.main_reason,a.product_skc_id 会导致数据错乱吗,错乱了如何修改内容:根据给出的SQL语句,存在以下问题:\n\n1. 在SELECT子句中使用了聚合函数MAX(),但没有使用GROUP BY子句对其他非聚合列进行分组。这将导致不确定性,因为MAX()函数将返回每个分组中的最大值,而其他列的值可能是来自不同的记录。\n\n2. 在LEFT JOIN子句中,将erp_pdd_qc_bill表与erp_pdd_stock_assessment表进行了连接,但在连接条件中,除了a.id = b.assessment_id之外,还包括了b.product_skc_id = a.product_skc_id。这将导致连接的结果可能不是您预期的结果,因为在连接时,会根据这两个条件来匹配记录。\n\n为了解决这些问题,可以进行如下修改:\n\nSELECT a.main_reason, a.product_skc_id, MAX(b.qc_end_time)\nFROM erp_pdd_stock_assessment a\nLEFT JOIN erp_pdd_qc_bill b ON a.id = b.assessment_id\nGROUP BY a.main_reason, a.product_skc_id\n\n根据修改后的SQL语句,我们移除了原来在SELECT子句中的非聚合列a.mian_reason和a.product_skc_id,并将MAX(b.qc_end_time)作为结果返回。同时,我们只在GROUP BY子句中使用了a.main_reason和a.product_skc_id,以确保结果按照这两列进行分组。这样可以避免数据错乱的问题。
原文地址: https://www.cveoy.top/t/topic/p9cl 著作权归作者所有。请勿转载和采集!