mysql Laravel子查询:子查询返回可用数量时显示物料

rmbxnbpk  于 2023-02-28  发布在  Mysql
关注(0)|答案(1)|浏览(126)

我正在尝试获取其available_qty的所有项目
available_qty基于包含item_id、type(enum=['in','out'])和qty列的表事务
项目表是事务的父表,包含列名、说明、单位等
到目前为止,我所尝试的就是这个。

SELECT name, 
(
    (SELECT sum(qty) from transactions WHERE items.id=transactions.item_id and type='in')
        -
    (SELECT sum(qty) from transactions WHERE items.id=transactions.item_id and type='out')
) as available_qty FROM `items`;

如果其中一个子查询返回空值,即使另一个子查询返回正数,上述查询也将返回空值。

我想得到实际的可用数量。我想把这个子查询转换成模型获取方法与addSelect或闭包。。请帮助我。

agxfikkp

agxfikkp1#

您只需连接两个表和,然后根据type值对qty求和

SELECT i.name, SUM(CASE WHEN t.type='in' THEN t.qty ELSE (t.qty * -1) END) AS available_qty
FROM items i, transactions t
WHERE i.id = t.item_id
GROUP BY i.name
HAVING available_qty > 0;

相关问题