2013-07-20 50 views
2

我看起來像這樣的兩個表:使用INSERT INTO與「SELECT」提供一些值,而不是其他(Access 2010中)

('MASTER_EOD' TABLE) 
ID SHA1_HEX ROLE 
---------------------------- 
1 ff34bb03 2 
2 eef0a005 1 



('ROLE_INDEX' TABLE) 
ROLE_NUM ROLE_NAME 
-------------------------- 
1   Welcome Calls 
2   Follow Up 
3   Outbound 

應當指出的是,ROLEROLE_INDEX加入到ROLE_NUM表。

我試圖寫一個修改查詢,我可以從ROLE_NAME傳遞一個字符串(如「跟進」,「出站」)等和它相關的ROLE_NUM將被放入「ROLE」列。

我試着用下面的查詢來完成這個測試;

INSERT INTO master_eod (sha1_hex, role) 
VALUES ('ef03ff03',(SELECT role_num FROM role_index WHERE role_name='Follow Up')); 

,但我得到了以下錯誤: 查詢輸入必須包含至少一個表或查詢。

但是,如果我把SELECT role_num FROM role_index WHERE role_name='Follow Up'到它自己的查詢,它的工作原理..同樣,如果我整個SELECT部分​​與原始值,例如,它的工作原理。

我錯過了什麼?我想我可能需要以某種方式使用'INNER JOIN',但我仍然在學習SQL的基礎知識,無法圍繞這個特定問題包裝頭,以及爲什麼Access會拋出它所做的錯誤。

回答

4

嘗試做它在SQL最標準的方式,通過使用SELECT作爲INSERT整個源,而不是隻是一個單一的列子查詢:

INSERT INTO master_eod (sha1_hex, role) 
SELECT 'ef03ff03', role_num FROM role_index WHERE role_name='Follow Up' ; 

請注意,您必須確保這些一個查詢(單獨的SELECT)只返回一行,否則最終會一次插入多行,每個查找一個role_num(可能或不可取)。

+0

你甚至不知道你可以通過'SELECT'命令傳遞靜態值。我也喜歡下面提到的Dlookup()方法,但是你的方式看起來更像SQL! – timonippon

1

您可以用DLookup表達式代替SELECT role_num ...查詢。

SELECT role_num FROM role_index WHERE role_name='Follow Up' 
DLookup("role_num", "role_index", "role_name='Follow Up'") 

在您的INSERT中使用DLookup

INSERT INTO master_eod 
    (
     sha1_hex, 
     [role] 
    ) 
VALUES 
    (
     'ef03ff03', 
     DLookup("role_num", "role_index", "role_name='Follow Up'") 
    ); 

我在方括號內role,因爲它是一個reserved word