SELECT max aoperational_progress operational_progress aoperational_remark aproduct_skc_id amain_reason FROM erp_pdd_stock_assessment aLEFT JOIN SELECT product_skc_id main_reason max operational_prog
根据给出的SQL查询语句,以下是可能导致数据错乱的问题:
-
在子查询中,使用了GROUP BY子句来分组结果。这意味着对于每个不同的main_reason和product_skc_id组合,只能选择一个operational_progress和operational_remark的值。这可能导致丢失其他可能的operational_progress和operational_remark的组合。
-
在主查询中,使用了LEFT JOIN来连接原始表和子查询结果。这意味着对于每个原始表的记录,将选择与子查询结果匹配的记录。如果在子查询中找不到匹配的记录,那么将返回NULL值。这可能导致一些原始表的记录被丢弃。
要修复此问题,可以尝试以下修改:
-
移除子查询中的GROUP BY子句。这样可以选择每个main_reason和product_skc_id组合的所有可能的operational_progress和operational_remark的值。
-
在主查询中使用INNER JOIN而不是LEFT JOIN。这样,只有在子查询中找到与原始表记录匹配的记录时,才会返回结果。
修复后的SQL查询语句如下所示:
SELECT max(a.operational_progress) operational_progress, a.operational_remark, a.product_skc_id, a.main_reason
FROM erp_pdd_stock_assessment a
INNER JOIN (SELECT product_skc_id, main_reason, operational_progress, operational_remark FROM erp_pdd_stock_assessment) b
ON a.product_skc_id = b.product_skc_id
AND a.main_reason = b.main_reason
AND a.operational_progress = b.operational_progress
AND a.operational_remark = b.operational_remark
GROUP BY a.main_reason, a.product_skc_i
原文地址: http://www.cveoy.top/t/topic/irCZ 著作权归作者所有。请勿转载和采集!