感谢您路过。我知道基本的SQL语法,但似乎找不到找到完成此任务的方法。
我需要创建一个存储过程,该存储过程将从一个表中的数据插入另一个表中,同时从许多其他表中检索数据。假设我有这些带有列的表:
users
tmp_users
subs
dubs
用伪代码翻译,我应该做这样的事情:
INSERT INTO users (name, sub_id, dub_id)
ALL ROWS FROM tmp_users VALUES (
name = tmp_users.name,
sub_id = SELECT id FROM subs WHERE tmp_users.sub_name = subs.name,
dub_id = SELECT id FROM dubs WHERE tmp_users.dub_name = dubs.name,
)
在措辞上,我需要将users
中的所有行插入tmp_users
中,以保留col tmp_users.name
,但要根据id
列检索所有其他表的传入*_name
。我应该如何处理此任务?
似乎您正在寻找the INSERT ... SELECT
syntax:
INSERT ... SELECT
这将带走INSERT INTO users (name, sub_id, dub_id)
SELECT
tu.name,
s.id,
d.id
FROM tmp_users tu
LEFT JOIN subs s ON s.name = tu.sub_name
LEFT JOIN dubs d ON d.name = tu.dub_name
中的所有行,然后尝试恢复相应的tmp_users
和sub_id
。对于dub_id
返回的每一行,在select
中插入一条记录。关于此语法的一件好事是,您可以先独立运行users
查询,以查看将要插入的内容。