2014-06-11 68 views
2

列在Access 2010女士表列我有兩個相同的表,表示A和B更新從另一個表中MSACCESS

各表的結構是

key | text_column1 | text_column2 

我不得不更新表A的行,以便如果對於A中的給定行,兩個文本列是空的,則必須給出來自表B的值。

展望around,我試圖

UPDATE A as a 
SET a.text_column1 = (SELECT b.text_column1 FROM B AS b WHERE b.key = a.key), 
a.text_column2 = (SELECT b.text_column2 FROM B AS b WHERE b.key = a.key) 
WHERE a.text_column1 IS NULL and a.text_column2 

不用說,以前的查詢不起作用。我error 3073 (2010)

回答

2

您可以使用Access的UPDATE .. JOIN語法:

UPDATE A as a 
     INNER JOIN B as b 
      ON a.Key = b.Key 
SET  a.text_column1 = b.text_column1, 
     a.text_column2 = b.text_column2 
WHERE a.text_column1 IS NULL 
AND  a.text_column2 IS NULL; 

另一種選擇是使用Dlookup

UPDATE A 
SET  text_column1 = Dlookup("text_column1", "B", "Key = "& A.Key), 
     text_column2 = Dlookup("text_column2", "B", "Key = "& A.Key) 
WHERE a.text_column1 IS NULL 
AND  a.text_column2 IS NULL; 
+0

第一個解決方案效果非常好!我沒有試過'DLOOKUP'。 –

+1

@mat_boy僅供參考,您所做的編輯沒有任何區別。它工作正常,沒有表別名。此外,您正在給一張表的別名與它的名稱相同 - 這有點像說:「嗨,我的名字是加雷思,但你可以稱呼我加雷斯」。 – GarethD

+0

我同意你的意見!顯然,我的表名不是'A'和'B' :)所以,我添加了別名,以避免混淆大寫/小寫。假設有人想在另一個上下文中應用上述行。別名可以幫助他避免錯誤。 –

0

試試這個

UPDATE A 
SET A.text_column1 = (SELECT b.text_column1 FROM B AS b WHERE b.key = A.key), 
A.text_column2 = (SELECT b.text_column2 FROM B AS b WHERE b.key = A.key) 
WHERE A.text_column1 IS NULL and A.text_column2 IS NULL; 
+0

這將在大量的工作DBMS,但這在Access中不起作用。 – GarethD

+0

@GarethD:你有沒有嘗試過,你能說出理由來證明你的理由。 –

+0

是的,我已經嘗試過了(至少在2007年的版本) - 在我的答案中看截圖。我不知道Access沒有實現這個語法的確切原因,或者爲什麼它有這些限制。我只知道它的確如此。 – GarethD