我有两张桌子:item& job_item。
表项以item_id
为主键,而job_item有一个复合键(item_id
& job_id
)。
我想得到一个结果:
remaining_quantity
位于item.quantity – sum(job_item.quantity)
的位置,如果等于零,我不想显示此特定的item_id记录。
我的尝试:
SELECT `item`.`item_id` , `item_name` , `item_brand` , `item`.`quantity` - sum( `job_item`.quantity` ) AS remaining_quantity
FROM `item` , `job_item`
WHERE `job_item`.`item_id` = `item`.`item_id`;
但这显示错误的结果,只有一条记录。
答案 0 :(得分:1)
由于您的@Injectable()
表中有唯一的item_id
,因此您只需要按item
表中的列进行分组,并添加一个having子句以使用item
放弃结果:< / p>
remaining_quantity = 0
结果:
select
i.item_id, i.item_name, i.item_brand,
i.quantity - sum(ji.quantity) as remaining_quantity
from item i
join job_item ji on i.item_id = ji.item_id
group by i.item_id, i.item_name, i.item_brand, i.quantity
having i.quantity - sum(ji.quantity) <> 0
注意:
item_id | item_name | item_brand | remaining_quantity
---------+------------+-------------+-------------------
22 | dummy name | dummy brand | 39
语法,不要在JOIN
条款在评论中按照请求进行修改:
如果您需要处理WHERE
表中没有匹配行的情况,请将联接更改为job_item
并将LEFT JOIN
应用于coalesce
以上它将返回0而不是NULL值:
sum
答案 1 :(得分:0)
尝试使用 JOIN
SELECT I.item_id, I.item_name, I.item_brand, (I.quantity - J.Qty) AS remaining_quantity
FROM item I JOIN (SELECT item_id AS itm, SUM(quantity) Qty
FROM job_item Group BY item_id) J ON J.item_id = I.item_id;