簡體   English   中英

准備好的語句-跨表更新

[英]Prepared statement - cross table update

我正在嘗試將准備好的語句與跨表更新結合使用。 我准備了一個代表我們較大數據庫的示例腳本。 第一部分無需做准備就可以完成我想做的事情,但是我希望避免對數據的每一列都進行復制/粘貼。

SET SESSION group_concat_max_len = 1000000000;
drop table if exists update_test;
create table update_test(
time_index decimal(12,4),
a varchar(20),
b varchar(20),
c varchar(20));
insert into update_test(time_index) values(20150101.0000),(20150101.0015),(20150101.0030);

drop table if exists energy_values;
create table energy_values(
time_stamp decimal(12,4),
site_id varchar(5),
energy int);
insert into energy_values 
values(20150101.0000,'a',100),(20150101.0000,'b',200),(20150101.0000,'c',300),
      (20150101.0015,'a',400),(20150101.0015,'b',500),(20150101.0015,'c',600),
      (20150101.0030,'a',700),(20150101.0030,'b',800),(20150101.0030,'c',900);

drop table if exists update_test_sites;
create table update_Test_sites(
sites varchar(5));
insert into update_test_sites values
('a'),('b'),('c');

update update_test, energy_values, update_test_sites
set    update_test.a=energy_values.energy
where update_test.time_index = energy_values.time_stamp
and energy_values.site_id ='a';

update update_test, energy_values, update_test_sites
set    update_test.b=energy_values.energy
where update_test.time_index = energy_values.time_stamp
and energy_values.site_id ='b';

update update_test, energy_values, update_test_sites
set    update_test.c=energy_values.energy
where update_test.time_index = energy_values.time_stamp
and energy_values.site_id ='c';
select * from update_test;

這就是為什么我嘗試用這種方法代替更新功能的原因。 但是,我經常收到語法錯誤報告。 誰能確定我要去哪里錯了? 不勝感激!

SELECT
concat(

'update update_test, energy_values, update_test_sites
set    update_test.',sites,'=energy_values.energy
where update_test.time_index = energy_values.time_stamp
and energy_values.site_id = ',sites,';
select * from update_test;')

from update_test_sites
where sites = 'a'
INTO @sql;

PREPARE stmt FROM @sql;
EXECUTE stmt;

我從未見過“ SELECT INTO”這樣的工作方式。 以我的經驗,它的用法如下:

SELECT [field_list] INTO [variable_list] 
FROM [some_table] 
[etc...]

我認為它不能像您正在嘗試的那樣用於存儲結果集。

通過一些調整並在存儲過程中進行此操作,您可以使用游標遍歷結果以分別准備和執行每個生成的語句。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM