使用INSERT INTO和'SELECT'提供一些值但不提供其他值(Access 2010)

时间:2013-07-20 00:18:42

标签: sql ms-access

我有两个看起来像这样的表:

('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

应该注意ROLE已加入ROLE_NUM表中的ROLE_INDEX

我正在尝试编写一个修改查询,我可以在其中传递来自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部分​​具有原始值,例如 3 ,它就可以工作。< / p>

我错过了什么?我想我可能需要以某种方式使用'INNER JOIN',但我仍然在学习SQL的基础知识,并且无法解决这个特定问题以及为什么Access会抛出它所犯的错误。

2 个答案:

答案 0 :(得分:5)

尝试在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(可能或者可能不合适。)

答案 1 :(得分:2)

您可以将DLookup表达式替换为SELECT role_num ...查询。

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

DLookup中使用INSERT

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

我将role括在方括号中,因为它是reserved word