Sql 基于FROM子句更新表时,如何限制WHERE?

Sql 基于FROM子句更新表时,如何限制WHERE?,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我有一个SQL UPDATE子句,它看起来像: UPDATE table SET column =value FROM (SELECT bla bla FROM bla bla WHERE col = val) JOIN (SELECT bla bla FROM bla bla WHERE col = val) 我想将更新限制在特定列等于特定值的位置 在联接之后或集合之后插入WHERE似乎不合法?我以为我已经用JOIN限制了更新,但看起来不是这样 在哪里可以插入Where子句?如果此vlau

我有一个SQL UPDATE子句,它看起来像:

UPDATE table 
SET column =value
FROM
(SELECT bla bla FROM bla bla WHERE col = val)
JOIN
(SELECT bla bla FROM bla bla WHERE col = val)
我想将更新限制在特定列等于特定值的位置

在联接之后或集合之后插入WHERE似乎不合法?我以为我已经用JOIN限制了更新,但看起来不是这样


在哪里可以插入Where子句?

如果此
vlaue
是文本值,而不是来自这些联接表的值,则可以执行以下操作:

UPDATE table t1
SET t1.column = value -- literalvalue
FROM
(
   SELECT bla bla FROM bla bla)
   JOIN
   (
      SELECT bla bla FROM bla bla
   ) on thefirstblah = somethingfromthesecondblah
) t1
或:

UPDATE table t1
SET t1.column = value -- literalvalue
FROM
(
   SELECT bla bla FROM bla bla
   JOIN anotherbla ON ----
) t1;
但是,如果此
来自其中一个联接表:

UPDATE table t1
SET t1.column = t2.value 
FROM table t1
JOIN table2 t2 ON ---

到目前为止,你的例子已经被删去了,很难确切地说出你想要的是什么

这可能只是给你的嵌套别名的问题,如下所示:

Update table 
  Set column =value
From
  (Select bla bla From bla bla Where col = val) a
    Join
  (Select bla bla From bla bla Where col = val) b
    On a.blah = b.blah -- did this go missing from the example?
Where
  ...
SQL Server有一个更新表单,可以帮助:

Update
  t1
Set
  blah
From
  table1 t1 -- note same as updated table
    inner join
  (select...) a
    On t1.blah = a.blah
Where
  t1.Col = value

使用类似以下内容的查询:

对我来说最重要的是在更新之前加入

update table1 t1 join table2 t2 on t1.id1 = t2.id2 set t1.value = t2.otherValue;
可能重复,请参阅