Sql server 如何使用不同表的最大值更新表?
我需要更新表1中的col1,使其具有表2中val中的最高值,该值低于 表1中的col2。我正在尝试:Sql server 如何使用不同表的最大值更新表?,sql-server,Sql Server,我需要更新表1中的col1,使其具有表2中val中的最高值,该值低于 表1中的col2。我正在尝试: update table1 set col1 = max(t2.val) from table2 t2 where t2.VAL < col2 运行查询后,我希望它看起来像这样: Table1 Col1 Col2 2 1 3 1 4 1 6 5 7 5 8 5 9 5 10 5 编辑 对于您的值,结果如下: UPDATE t1
update table1 set col1 = max(t2.val)
from table2 t2 where t2.VAL < col2
运行查询后,我希望它看起来像这样:
Table1
Col1 Col2
2 1
3 1
4 1
6 5
7 5
8 5
9 5
10 5
编辑
对于您的值,结果如下:
UPDATE t1
SET col2 = (SELECT MAX(Val) FROM dbo.Table2 WHERE Val < t1.col1)
FROM dbo.Table1 AS t1;
编辑
对于您的值,结果如下:
UPDATE t1
SET col2 = (SELECT MAX(Val) FROM dbo.Table2 WHERE Val < t1.col1)
FROM dbo.Table1 AS t1;
如果Shark的答案不是你想做的,那么也许你应该更好地解释你的问题-样本数据,期望的结果等等。我写了和Shark相同的答案,但他比我抢先,所以如果两个人对你的问题提出了完全相同的解决方案,而这个解决方案是错误的,你需要改进这个问题。如果Shark的答案不是你想要做的,那么也许你应该更好地解释你的问题-样本数据,期望的结果等。我写了和Shark相同的答案,但他比我快,所以如果两个人对你的问题提出了完全相同的解决方案,而这个解决方案是错误的,你需要改进这个问题。你太棒了,好先生。您只需使用我的while循环大约需要5天的时间,并且不到4分钟。price,modified,ddd-这些列名来自哪里?同样令人困惑的是,您将val列移动到了另一个表中。YMMV@AaronBertrand这只是我的一个本地表,我很快改变了它以适应他的问题。printscreen&query足以理解。但您可以使用他拥有的相同列命名本地表,这样您就不需要屏幕截图来演示代码了。@AaronBertrand这一观点不如解决方案重要。除此之外,如果他读了我的解决方案,他就能理解并在他的问题上实施它。。。他获得了从样本中看问题的能力——这是他代码的解决方案。你太棒了,好先生。您只需使用我的while循环大约需要5天的时间,并且不到4分钟。price,modified,ddd-这些列名来自哪里?同样令人困惑的是,您将val列移动到了另一个表中。YMMV@AaronBertrand这只是我的一个本地表,我很快改变了它以适应他的问题。printscreen&query足以理解。但您可以使用他拥有的相同列命名本地表,这样您就不需要屏幕截图来演示代码了。@AaronBertrand这一观点不如解决方案重要。除此之外,如果他读了我的解决方案,他就能理解并在他的问题上实施它。。。他获得了从示例中查看的能力—代码的解决方案。感谢您的帮助。直到我跑完罗伊的店,我才看到你的答案。有趣的是,当我运行Display Estimated Execution Plan时,它们的成本几乎完全相同。他的利润比你的少。你应该比较实际的,而不是估计的。我怀疑他们会一模一样。你用哪一个应该是哪一个更容易理解,而不是哪一个有更好的估计计划。如果这是交叉应用,很好-只是不要依赖估计的计划来确定哪种解决方案最快。谢谢你的帮助。直到我跑完罗伊的店,我才看到你的答案。有趣的是,当我运行Display Estimated Execution Plan时,它们的成本几乎完全相同。他的利润比你的少。你应该比较实际的,而不是估计的。我怀疑他们会一模一样。你用哪一个应该是哪一个更容易理解,而不是哪一个有更好的估计计划。如果这是交叉应用,很好-只是不要依赖估计的计划来确定哪种解决方案最快。
UPDATE t1 SET
modified = a.ddd from t1 t CROSS APPLY (SELECT MAX(t2.price) AS ddd from t2 WHERE t2.price<t.val) a
UPDATE t1
SET col2 = (SELECT MAX(Val) FROM dbo.Table2 WHERE Val < t1.col1)
FROM dbo.Table1 AS t1;