我有两个看起来像这样的表:
('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会抛出它所犯的错误。
答案 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。