Sql server 如何使用不同表的最大值更新表?

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

我需要更新表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
    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;