我是计算机领域的新手,我正在研究SQL。我在PostgreSql中使用多个联接查询。我正在尝试制作库存管理系统。我有3张桌子,如下所示:
因此,我想显示库存量少于表1中设置的最低限额的产品的列表。表1中的inventory_id
包含数字或'A','B','C'的值。如果是数字,则引用表2,否则引用表1。因此,例如,如果表1的inventory_id
包含值2,它将检查表2并获得in_stock
值。如果它包含值'A',则它参考表3中的列A
,并将采用其中的值。
我尝试了以下查询,但对我没有用。
SELECT ils.product_id as limit_prod, ils.inventory_id as limit_inv from inventory_limit_stock ils
left join product_inventory as pi on pi.product_id = ils.product_id
left join other_inventory oi on oi.product_id = ils.product_id
where (COALESCE(ils.min_stock_limit,0) > COALESCE(SUM(pi.in_stock), SUM(oi.limit_inv), 0)) group by ils.product_id, ils.inventory_id
我知道查询中有太多错误,我们将不胜感激。也为这个冗长的问题感到抱歉,这是我在这里的第一个问题,希望大家都理解。谢谢。
编辑
表1-stock_limit_stock
id | product_id | inventory_id | min_stock_limit
1 | 121 | 5 | 25
2 | 052 | B | 27
3 | 8 | 13 | 11
4 | 121 | 13 | 35
表2-product_inventory
id | product_id | inventory_id | in_stock
1 | 121 | 5 | 42
2 | 742 | 15 | 12
3 | 8 | 13 | 09
4 | 121 | 13 | 25
表3-其他库存
id | product_id | A | B | C
1 | 121 | 42 | 12 | 11
2 | 052 | 42 | 25 | 25
结果列表 (应显示产品入库数量<最小限制的列表)
product_id | inventory | minimum_stock_limit | in_stock_available
8 | 13 | 11 | 9
121 | 13 | 35 | 25
052 | B | 27 | 25
答案 0 :(得分:1)
对于汇总结果,应使用Have而不是where
SELECT ils.product_id as limit_prod
, ils.inventory_id as limit_inv
from inventory_limit_stock ils
left join product_inventory as pi on pi.product_id = ils.product_id
left join other_inventory oi on oi.product_id = ils.product_id
group by ils.product_id, ils.inventory_id
HAVING (COALESCE(ils.min_stock_limit,0) >COALESCE(SUM(pi.quantity), SUM(oi.limit_inv), 0))
having子句处理select ..的结果,其中处理表..
中的原始值