[英]MySQL - INSERT INTO from a Temporary Table
這似乎很簡單,但我堅持使用簡單的插入語句。
begin work;
CREATE TEMPORARY TABLE IF NOT EXISTS insert_table AS
(
select
r.resource_id
,fr.file_repos_id
,mv.VALUE
from
resources r
join versions v on v.RESOURCE_ID = r.resource_id
join metadata_values mv on mv.resource_id = r.resource_id
join file_repository fr on fr.file_repos_id = v.foreign_id
where
v.version_status = 'C'
and r.RESOURCE_TYPE = 4
and fr.file_title in ('suburbs')
);
insert
into
metadata_values (elem_id,value,resource_type,resource_id,foreign_id,mtvr_id,mett_id)
values
(62,'test',4,insert_table.resource_id,insert_table.file_repos_id,80,4);
rollback work;
在fr.file_title in ('suburbs')
的臨時表行fr.file_title in ('suburbs')
,實際列表是從其他位置動態拉出的(出於演示目的)。 我收到以下錯誤消息:
錯誤代碼:1054。“字段列表”中的未知列“ insert_table.resource_id”
現在,我可以在整個temp表上運行一次select,它返回正常,只是在update語句中失敗。 我正在MySQL工作台上運行它。 完全不知道這里發生了什么。
您要insert . . . select
insert . . . select
insert . . . select
:
insert into metadata_values(elem_id,value, resource_type, resource_id, foreign_id,
mtvr_id, mett_id
)
select 62, 'test', 4, insert_table.resource_id, insert_table.file_repos_id, 80, 4
from insert_table;
使用insert_table.column_name不會自動使用該表。 為此,您需要使用變量或選擇語句。
我認為您正在尋找的是以下內容,盡管如果insert_table中存在多行,則它將插入帶有elem_id 62的多行。 實際上,這將插入具有相同elem_id,value,mtvr_id和met_id的N行,其中N是insert_table中的行數。
insert into
metadata_values (elem_id,value,resource_type,resource_id,foreign_id,mtvr_id,mett_id)
values
Select
62,'test',4,insert_table.resource_id,insert_table.file_repos_id,80,4
From insert_table
您可以通過完全跳過臨時表來節省內存開銷。
insert into
metadata_values (elem_id,value,resource_type,resource_id,foreign_id,mtvr_id,mett_id)
values
Select
62,mv.VALUE,4,r.resource_id,fr.file_repos_id,80,4
From resources r
join versions v on v.RESOURCE_ID = r.resource_id
join metadata_values mv on mv.resource_id = r.resource_id
join file_repository fr on fr.file_repos_id = v.foreign_id
where
v.version_status = 'C'
and r.RESOURCE_TYPE = 4
and fr.file_title in ('suburbs')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.