我有两个表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但是其他一些我不知道它是如何到达它的数字。
答案 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上的演示