在 SQL 服务器中使用内部连接时求和函数的错误结果
Wrong Result With Sum Function When Use Inner Join In SQL Server
我有两个表;
Human
-----------
id
Name
list<car> cars
Car
-----------
id
name
price
Human
我想要一辆人类汽车的总价,所以我使用了这个 SQL 代码:
SELECT
SUM(Price)
FROM Cars
INNER JOIN Humans ON Cars.Human_id = 1
但结果是错误的。
例如:
id
name
Price
Human_id
1
car1
10000
1
2
car2
15000
1
当我为此 table 使用该代码时,结果是 50,000!但答案必须是 25,000。
看来这个错误和登记的汽车数量有关。
你能解释为什么 sum 函数和 inner join 会发生这种错误并计算数字倍数吗?
SELECT SUM(Price) FROM Cars WHERE Cars.Human_id = 1
SELECT
SUM(Price)
FROM Cars
INNER JOIN Humans ON Cars.Human_id = 1
这是所有人类和人类 1 的汽车之间的笛卡尔积。
你可能想要
SELECT
SUM(Price)
FROM Cars
INNER JOIN Humans
ON Cars.Human_id = Human.Id
WHERE Human.Id = 1
我有两个表;
Human
-----------
id
Name
list<car> cars
Car
-----------
id
name
price
Human
我想要一辆人类汽车的总价,所以我使用了这个 SQL 代码:
SELECT
SUM(Price)
FROM Cars
INNER JOIN Humans ON Cars.Human_id = 1
但结果是错误的。
例如:
id | name | Price | Human_id |
---|---|---|---|
1 | car1 | 10000 | 1 |
2 | car2 | 15000 | 1 |
当我为此 table 使用该代码时,结果是 50,000!但答案必须是 25,000。 看来这个错误和登记的汽车数量有关。 你能解释为什么 sum 函数和 inner join 会发生这种错误并计算数字倍数吗?
SELECT SUM(Price) FROM Cars WHERE Cars.Human_id = 1
SELECT
SUM(Price)
FROM Cars
INNER JOIN Humans ON Cars.Human_id = 1
这是所有人类和人类 1 的汽车之间的笛卡尔积。
你可能想要
SELECT
SUM(Price)
FROM Cars
INNER JOIN Humans
ON Cars.Human_id = Human.Id
WHERE Human.Id = 1