4

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

('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中加入了to 。ROLE_NUMROLE_INDEX

我正在尝试编写一个修改查询,我可以从中传递一个字符串ROLE_NAME(例如'Follow Up'、'Outbound')等,并且它的关联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,它就可以工作。

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

4

2 回答 2

7

尝试在 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 一个(这可能是可取的,也可能不是可取的)。

于 2013-07-20T00:26:53.583 回答
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用方括号括起来,因为它是保留字

于 2013-07-20T00:32:26.867 回答