2015-01-15 109 views
-3

我一直在收到有關此聲明的錯誤,我正在寫這些聲明並想知道是否有人可以提供幫助。我有兩張桌子。表A和表B.當兩個ID匹配時,我想用表B中的值更新表A.在一條語句中使用UPDATE和JOIN結合在一起

目前我的代碼看起來像:

UPDATE [Table A] 

SET [Table A].[Column 1]='value', [Table A].[Column 2]='value2', [Table A].[Column 3]='value3' 

INNER JOIN [Table B] 

ON [Table A].[Column 1] = [Table B].[Column 1] AND [Table B].[Column 2]; 

但我的回頭率,我不能識別語法錯誤。

+2

我們無法將其標識爲你沒有包含錯誤! –

+1

什麼是[表A]。[表3] ='value3''應該表示? – ryanyuyu

+0

在你的WHERE子句中,應該有[表B]。[第2列] – sqluser

回答

1

您錯過了INNER JOIN之前的FROM子句。加入SELECT,UPDATEDELETE的工作原理相同。試着這樣說:

UPDATE [Table A] 
SET [Table A].[Column 1]='value', [Table A].[Column 2]='value2', [Table A].[Column 3]='value3' 
FROM [Table A] 
INNER JOIN [Table B] 
ON [Table A].[Column 1] = [Table B].[Column 1] AND [Table B].[Column 2]; 

(未經測試,但它應該做的工作)

+0

我也試過這個,但我在查詢表達式中收到了語法錯誤(缺少運算符)。它在我的SET語句的結尾和我的FROM語句的開始之間聲明它。 –

+0

對不起,我在T-Sql中想。訪問語法似乎不同。 –

0

這將更新源表(S)值到目標表(T)

UPDATE T 
SET T.COLUMNA = S.COLUMNA, T.COLUMNB = S.COLUMNB 
FROM TARGET T 
INNER JOIN SOURCE S ON T.IDCOLUMN = S.IDCOLUMN 
WHERE 
S.FILTERCOLUMN = 'FILTERVALUE' 

但是,如果您的場景需要它,您可能需要考慮使用合併語句

MERGE TARGETTABLE T 
USING SOURCETABLE S 
    ON S.IDCOLUMN = T.IDCOLUMN 
WHEN MATCHED THEN 
    UPDATE SET COLUMNA = S.COLUMNA, COLUMNB = S.COLUMNB 
WHEN NOT MATCHED BY TARGET 
    THEN INSERT(COLUMNA, COLUMNB) VALUES (S.COLUMNA, S.COLUMNB) 
WHEN NOT MATCHED BY SOURCE 
    THEN DELETE; 
+0

我通常會使用合併語句,但不幸的是,T-SQL在訪問中不起作用,但我希望它會哈哈,但感謝您的建議! –

相關問題