You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL查询如何添加WHERE条件筛选sell_qty与sold_qty不匹配的数据

调整方案

原语句无法直接在WHERE子句中使用sell_qty、sold_qty别名筛选,因为SQL执行顺序中WHERE阶段早于SELECT别名定义阶段,你可以用以下两种方式调整:

方案1:直接在现有语句基础上加HAVING子句

在原语句的GROUP BY之后新增HAVING筛选即可,调整后的完整语句如下:

SELECT 
purchase_lines.`product_id`,
(SELECT SUM(`quantity`) FROM `purchase_lines` 
WHERE transaction_sell_lines.product_id = purchase_lines.product_id GROUP BY product_id LIMIT 1 ) as purchase_qty,
(SELECT SUM(`quantity`) FROM `transaction_sell_lines` 
WHERE transaction_sell_lines.product_id = purchase_lines.product_id GROUP BY product_id LIMIT 1 ) as sell_qty,
(SELECT SUM(`quantity_sold`) FROM `purchase_lines` 
WHERE transaction_sell_lines.product_id = purchase_lines.product_id GROUP BY product_id LIMIT 1 ) as sold_qty,
variation_location_details.qty_available as avaiable_qty
FROM 
`purchase_lines`, 
variation_location_details,
transaction_sell_lines
WHERE 
purchase_lines.product_id = variation_location_details.product_id
AND
variation_location_details.product_id = transaction_sell_lines.product_id
GROUP BY 
variation_location_details.product_id
-- 新增HAVING筛选不匹配的记录
HAVING sell_qty <> sold_qty

注意:如果两个字段可能存在NULL值,建议把判断条件改为HAVING NOT (sell_qty <=> sold_qty),避免NULL值比对时结果为NULL被遗漏。

方案2:套一层子查询后在WHERE筛选(可读性更高)

如果不习惯用HAVING,也可以把原有查询作为子查询,在外层加WHERE条件:

SELECT * FROM (
    SELECT 
    purchase_lines.`product_id`,
    (SELECT SUM(`quantity`) FROM `purchase_lines` 
    WHERE transaction_sell_lines.product_id = purchase_lines.product_id GROUP BY product_id LIMIT 1 ) as purchase_qty,
    (SELECT SUM(`quantity`) FROM `transaction_sell_lines` 
    WHERE transaction_sell_lines.product_id = purchase_lines.product_id GROUP BY product_id LIMIT 1 ) as sell_qty,
    (SELECT SUM(`quantity_sold`) FROM `purchase_lines` 
    WHERE transaction_sell_lines.product_id = purchase_lines.product_id GROUP BY product_id LIMIT 1 ) as sold_qty,
    variation_location_details.qty_available as avaiable_qty
    FROM 
    `purchase_lines`, 
    variation_location_details,
    transaction_sell_lines
    WHERE 
    purchase_lines.product_id = variation_location_details.product_id
    AND
    variation_location_details.product_id = transaction_sell_lines.product_id
    GROUP BY 
    variation_location_details.product_id
) t
WHERE t.sell_qty <> t.sold_qty

额外优化建议

原SQL用的是隐式交叉连接关联表,性能较低,建议改成显式JOIN写法,同时子查询里的关联条件可以统一对齐主表字段,避免逻辑错误。

内容的提问来源于stack exchange,提问作者RK-Rohan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 15:06:03