如何在3列上更新sql表join

时间:2015-08-13 19:36:11

标签: sql

我正在尝试更新我的表格产品,但仅针对临时表格中的行,请参阅下文:

Table Products

PkProduct   Price   DateChanged 
1           4.99    2013-01-01  
1           5.99    2014-01-01  
2           10.50   2000-01-01  
2           12.50   2002-01-01  
2           14.50   2003-01-01  
3           0.99    2000-01-01  
4           0.99    2000-01-01  
5           0.99    2000-01-01  

Temporary Table #temptable

PkProduct   Price   DateChanged
2           12.50   2002-01-01
2           14.50   2003-01-01

您可以看到我的#temptable包含行等于到表Products 我想为这些行设置一个新价格,让我们说@variableNewPrice = 2.75

我正在尝试在更新代码中创建一个联接:

UPDATE Products
SET Price = @variableNewPrice
FROM Products p1
RIGHT JOIN #temptable p2
ON p2.PkProduct = p1.PkProduct 
AND p2.Price = p1.Price
AND P2.DateChanged = p1.DateChanged

效果不好。我只尝试了PkProduct = PkProduct但是后来这个PkProduct的每一行都改变了!我没有列PkProduct,它是表的真正唯一Pk。

感谢您的帮助=)

1 个答案:

答案 0 :(得分:1)

这应该是您尝试做的正确语法:

UPDATE  P
SET     Price = @variableNewPrice
FROM    Products    P
JOIN    #temptable  T   ON  P.PkProduct = T.PkProduct 
                        AND P.Price = T.Price
                        AND P.DateChanged = T.DateChanged

查询有两个问题 - 最后一个ON子句是T.DateChanged = T.DateChanged,它始终是真的。另一个问题是你也在做OUTER JOIN,这在这种情况下没有意义。我修改了查询以使用INNER JOIN