2012-12-06 67 views
1

我看起來像一個SQL UPDATE子句:更新基於FROM子句的表,我如何限制WHERE?

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) 

我想額度更新到一個特定的列等於一個特定的值。

它似乎沒有合法插入JOIN後或SET後的WHERE?我以爲我已經限制使用JOIN的更新,但它並不是如此。

我可以在哪裏插入我的WHERE子句?

+0

可能的重複請參閱http://stackoverflow.com/questions/3836126/update-with-join-statement-mysql –

回答

0

如果這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

您的示例已被刪除,以至於很難準確判斷出您的內容。

這可能只是給予你的嵌套選擇別名,像這樣的事情:

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 
0

使用的查詢是這樣的:

對我來說重要的事情是之前更新之前加入。

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