3

我有一个 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 子句?

4

3 回答 3

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
于 2012-12-06T11:42:31.637 回答
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 ---
于 2012-12-06T11:38:46.757 回答
0

使用类似这样的查询:

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

update table1 t1 join table2 t2 on t1.id1 = t2.id2 set t1.value = t2.otherValue;
于 2017-12-07T09:11:07.513 回答