2011-12-27 102 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計算的論點也是如此。 –