SQL:INSERT INTO table(…)VALUES(…)以及从其他表中检索到的数据

问题描述 投票:1回答:1

感谢您路过。我知道基本的SQL语法,但似乎找不到找到完成此任务的方法。

我需要创建一个存储过程,该存储过程将从一个表中的数据插入另一个表中,同时从许多其他表中检索数据。假设我有这些带有列的表:

  1. users

    • 名称(varchar)
    • sub_id(int)
    • dub_id(int)
  2. tmp_users

    • 名称(varchar)
    • sub_name(varchar)
    • dub_name(varchar)
  3. subs

    • id(int)
    • 名称(varchar)
  4. dubs

    • id(int)
    • 名称(varchar)

用伪代码翻译,我应该做这样的事情:

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。我应该如何处理此任务?

mysql sql database sql-insert
1个回答
4
投票

似乎您正在寻找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_userssub_id。对于dub_id返回的每一行,在select中插入一条记录。关于此语法的一件好事是,您可以先独立运行users查询,以查看将要插入的内容。

© www.soinside.com 2019 - 2024. All rights reserved.