在不同的数据库sql中添加两列的值

时间:2013-05-25 23:39:42

标签: sql

我有两个表Product和Stock分别位于两个不同的数据库dbA和dbB上。它们分别包含QTY,Quantity列。

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但是其他一些我不知道它是如何到达它的数字。

3 个答案:

答案 0 :(得分: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)。

答案 1 :(得分: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

答案 2 :(得分:0)

您需要将两个子查询相加而不是交叉连接

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

SQLFiddle上的演示