2011-12-27 103 views
1

比较我有两个表
SQL查询与另一列

table_inventory 
    List item 
    inventory_rack_key(primarykey) 
    node_key 
    rack_id 
    inventory_item_key 
    in_coming_qty,locked_qty 
    quantity 

table_item 
    inventory_item_key(primary key) 
    item_id,product_zone 

此处提供的表例如DB TABLES
我需要查询找出这些项目对于其(net_qty)即差异b/w总和为in_coming_qty & quantity & locked_qty为负数。排列方式node_key,rack_id, item_id,net_qty

注意:每个不同的集合{node_key,rack_id, item_id,net_qty}将只有1行输出。 对于例如:{node_key,rack_id, item_id} = {ABD101,RK-01,562879}在中有4行,table_inventory 但输出net_qty = -78(单行)。

我提出的查询是给我结果,但我们可以用其他方式吗?

SELECT l.node_key, 
     l.rack_id, 
     i.item_id, 
     (SUM(l.quantity + l.in_coming_qty) - SUM(l.locked_qty)) AS net_qty 
FROM table_inventory l, 
     table_item i 
WHERE l.inventory_item_key = i.inventory_item_key 
GROUP BY l.node_key, 
      l.rack_id, 
      i.item_id 
HAVING SUM(l.quantity + l.in_coming_qty) - SUM(l.locked_qty) < 0 
+2

为什么你的答案不可接受? – mwigdahl

+0

@mwigdahl我的答案是正确的,但有没有其他方式可以做同样的工作 – 2FaceMan

+1

如果你当前的解决方案没有直接的问题(比如不一致的结果,太慢等),你可以考虑在http:// codereview上发布它。 stackexchange.com/,这是针对这样的问题。 –

回答

4

不是。有这个小的变体:

select v.* from (
SELECT l.node_key, 
     l.rack_id, 
     i.item_id, 
     SUM(l.quantity + l.in_coming_qty - l.locked_qty) AS net_qty 
FROM table_inventory l, 
     table_item i 
WHERE l.inventory_item_key = i.inventory_item_key 
GROUP BY l.node_key, 
      l.rack_id, 
      i.item_id 
) v 
where net_qty < 0 

- 这意味着SUM计算只需要编写一次代码,但你仍然需要做的总和。

+0

这是不那么庞大,谢谢 – 2FaceMan

+0

也请考虑使用ANSI'JOIN'语法 - 这将有助于隔离你的'WHERE'子句中的错误可能会导致笛卡尔'JOIN'。 – mwigdahl

+1

一般来说,这是不一样的。例如,如果有'locks_qty'为NULL而'quantity'和'in_coming_qty'不是(或相反方向)的行,则两个查询的结果将会不同。尽管如此,从列名判断这些NULL看起来不太可能,并且关于SUM计算的论点也是如此。 –