将表1中 数据转到表2 表1中字段account_id 是表2的后缀
时间: 2024-02-19 13:03:42 浏览: 136
好的,我理解了你的问题。你需要将表1中的数据转移到表2中,并在表2中的每个记录的末尾添加表1中对应记录的account_id后缀。以下是实现这个过程的SQL查询:
```
INSERT INTO table2 (field1, field2, field3, account_id)
SELECT field1, field2, field3, CONCAT('suffix_', account_id) AS account_id
FROM table1;
```
这个查询将从表1选择字段field1、field2、field3和account_id的值,并将它们插入到表2中的相应字段中。在插入时,使用CONCAT函数将account_id字段添加到'suffix_'后面,以形成表2中的完整account_id值。
相关问题
将mysql 表1中 数据转到多个表中,其中待转入的表的后缀 是 表1中字段account_id
好的,你需要将表1中的数据转移到多个表中,每个表的表名都是相同的前缀,后缀为表1中对应记录的account_id。以下是实现这个过程的SQL查询:
```
SET @prefix = 'table_prefix_';
SELECT DISTINCT CONCAT(@prefix, account_id) AS table_name
FROM table1;
-- 获取所有表名,用于创建新表
DROP TABLE IF EXISTS temp_table_names;
CREATE TEMPORARY TABLE temp_table_names
SELECT DISTINCT CONCAT(@prefix, account_id) AS table_name
FROM table1;
-- 创建新表结构
DROP TABLE IF EXISTS temp_table_structure;
CREATE TEMPORARY TABLE temp_table_structure
SELECT * FROM table1 WHERE 1 = 0;
-- 将数据插入到新表中
SET @sql = NULL;
SELECT GROUP_CONCAT(CONCAT('INSERT INTO ', table_name, ' SELECT * FROM temp_table_structure WHERE account_id = "', REPLACE(table_name, @prefix, ''), '";') SEPARATOR ' ')
INTO @sql
FROM temp_table_names;
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
```
这个查询首先获取所有要创建的表的表名,以及每个表的account_id后缀。然后,它创建一个临时表来存储这些表名,并根据表1的结构创建另一个临时表来存储从表1中选择的数据。
最后,它使用动态SQL将数据插入到每个新表中。它首先生成一个INSERT INTO语句,将数据从临时表temp_table_structure插入到对应的新表中。这里使用了REPLACE函数来获取每个表的account_id后缀。
注意,这个查询使用了动态SQL,因此需要在MySQL中启用它。如果你没有启用动态SQL,可以使用以下查询替换最后一部分:
```
SELECT CONCAT('INSERT INTO ', table_name, ' SELECT * FROM temp_table_structure WHERE account_id = "', REPLACE(table_name, @prefix, ''), '";')
FROM temp_table_names;
```
这个查询将生成一系列INSERT INTO语句,你需要将它们复制并粘贴到MySQL CLI中以执行它们。
阅读全文