基于FROM子句更新表,如何使用WHERE进行限制?

时间:2012-12-06 11:34:52

标签: 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)

我想将UPDATE限制为WHERE特定列等于特定值。

在JOIN之后或SET之后插入WHERE似乎是合法的吗?我以为我已经使用JOIN限制了更新,但它似乎没有出现。

我可以在哪里插入WHERE子句?

3 个答案:

答案 0 :(得分:2)

到目前为止,您的示例已被删除,因此很难准确说出您的目标。

这可能只是给你的嵌套选择别名如下:

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

答案 1 :(得分:1)

如果这个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;

但是,如果此value来自其中一个联接表:

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

答案 2 :(得分:0)

使用类似这样的查询:

对我有用的重要事情是在更新之后加入。

update table1 t1 join table2 t2 on t1.id1 = t2.id2 set t1.value = t2.otherValue;