【发布时间】:2017-09-27 07:15:23
【问题描述】:
是的,SQL UPDATE 可以在SELECT-子查询中与order by 一起使用。
任何有解决以下问题的方法的人:
程序有时会在TABLE1 中生成数据错误(我们不是该代码的所有者,但需要使用该程序...)
我们使用一个触发器来处理对AUDIT 表的所有更改。
我们可以通过以下选择找到错误情况(以及正确的旧值):
select top 1 audit.OldValue
from TABLE1
left join AUDIT on AUDIT.Table1_ID = TABLE1.ID
where <...some conditions...>
order by AUDIT.UpdateDate desc
由于记录了多项更改,我们只需要最后一次更改(order by updatedate 然后采用TOP 1)
如果我们可以使用UPDATE 命令,我们会更正数据错误
Update TABLE1
set VALUE =
( select top 1 audit.OldValue
from TABLE1
left join AUDIT on AUDIT.Table1_ID = TABLE1.ID
where <...some conditions...>
order by AUDIT.UpdateDate desc )
where TABLE1.ID = AUDIT.Table1_ID
但是:您不能在子查询中使用order by...
【问题讨论】:
-
您使用的是哪个 dbms?
-
我们使用 MS-SQL-Server 2012
-
这种限制似乎没有意义。您是否认为您不能在子查询中使用
ORDER BY,或者您是否尝试过这样的错误消息? -
尝试使用 CTE 而不是子查询
标签: sql sql-server sql-server-2012 sql-update sql-order-by