2013-05-25 30 views
1

我有兩個表Product和Stock分別位於兩個不同的數據庫dbA和dbB上。它們分別包含數量,數量列。在不同數據庫中添加兩列的值sql

QTY Quantity 
--- ----- 
50 30 
50 40 
50 60 
50 50 

我想返回這兩列中所有值的總和。 50 + 50 + 40 ... + 60 + 50 = 380

如果我這樣做:SELECT sum(QTY) FROM dbA.Product可以獲得200和SELECT sum(Quantity) FROM dbB.Stock給了我180,但是當我做這樣的事情:

SELECT sum(QTY) + sum(Quantity) FROM dbA.Product, dbB.Stock;我不明白380但我不知道它是如何到達它的其他數字。

回答

1

那是因爲你正在做一個交叉連接。

執行此代替:

select coalesce(asum, 0) + coalesce(bsum, 0) 
from (select sum(qty) as asum from dba.Product) a cross join 
    (select sum(quantity) as bsum from dbB.Stock) b 

的交叉連接是生產每一種可能的對的兩個表之間的值的用於在第一表中的總共16個行(4×4 = 16)對於每個行你(50,30),(50,40),(50,60),(50,50)。

+0

感謝的是做到了!是的,這是我一開始以爲...我需要刷新我對連接的知識!感謝您的補充解釋! :) – bytebiscuit

0

這個工程太:

SELECT 
    x.total + y.total AS total 
FROM 
    (SELECT 
     SUM(quantity) AS total 
     FROM 
     dbB.stock) AS x 
CROSS JOIN 
    (SELECT 
     SUM(qty) AS total 
     FROM 
     dbA.product) AS y 
0

你需要總結兩個子查詢,而不是交叉連接

SELECT (
     SELECT SUM(QTY) 
     FROM dba.Product 
     ) + 
     (
     SELECT SUM(Quantity) 
     FROM dbB.Stock 
     ) AS Total 

演示上SQLFiddle

相關問題