从具有数量操纵的两个表格形成一个表格

时间:2016-09-09 14:00:29

标签: mysql sql

我有两张桌子:item& job_item。 表项以item_id为主键,而job_item有一个复合键(item_id& job_id)。

enter image description here enter image description here

我想得到一个结果:

enter image description here

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`;

但这显示错误的结果,只有一条记录。

2 个答案:

答案 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;