我在一个查询中需要帮助。我使用的是SQL Server 2008。
我有三张桌子(例如,它们更简单):
create table PriceComponents
( id int,
summ money,
svkey1 int,
comission1 float,
svkey2 int,
comission2 float,
to_key int
);
create table Comissions
(
id int,
commission float,
svkey int,
to_key int
);
create table Goods
(
to_key int
);
表格中的简单数据:
insert into Goods values (1), (2), (3);
insert into Comissions values (1, 15, 1, 2), (2, 10, 2, 2), (3, 5, 1, 3);
insert into PriceComponents values (1, 100, 1, 0, 2, 0, 2), (2, 200, 1, 0, 2, 0, 3);
我想用该查询更新PriceComponents
(列comission1
和comission2
):
update dbo.PriceComponents
set comission1 = case when Comissions.svkey=svkey1 then dbo.Comissions.commission else comission1 end,
comission2 = case when Comissions.svkey=svkey2 then dbo.Comissions.commission else comission2 end
from dbo.PriceComponents
left outer join dbo.Goods on dbo.PriceComponents.to_key = dbo.Goods.to_key
left outer join dbo.Comissions on dbo.Goods.to_key = dbo.Comissions.to_key;
所以在查询PriceComponents
之前看起来像是:
id summ svkey1 comission1 svkey2 comission2 to_key
1 100,00 1 0 2 0 2
2 200,00 1 0 2 0 3
之后:
id summ svkey1 comission1 svkey2 comission2 to_key
1 100,00 1 15 2 0 2
2 200,00 1 5 2 0 3
但我期待这个结果:
id summ svkey1 comission1 svkey2 comission2 to_key
1 100,00 1 15 2 10 2
2 200,00 1 5 2 0 3
我真的不明白我的错误在哪里。
答案 0 :(得分:1)
您JOIN
to_key
,但试图从Comissions
中的两个不同的行中提取,其中只有一行匹配。
to_key
值仅匹配Comissions
行中的一个,这是第一个更新comission1
的行。 Comission2
永远不会匹配,因为to_key
和svkey
值在同一数据行中不会正确。