通过后缀选择所有具有相同列的表并将其合并为新表

时间:2019-07-15 09:10:24

标签: mysql sql phpmyadmin

我有一组具有完全相同的结构(列)的表,并且所有表都具有相同的后缀_data

我尝试过的事情:

CREATE TABLE global_data AS SELECT * FROM (SELECT * FROM v_data UNION ALL SELECT * FROM x_data UNION ALL SELECT * FROM z_data UNION ALL SELECT * FROM d_data ) X GROUP BY ('id') ORDER BY 1

但是结果是,即使没有自动递增colimn,我也只能得到一行,但是我需要每个表snd中具有autoincrement列的所有行。

所以我需要一个SQL查询:

  1. 按后缀选择所有表。
  2. 使用合并的表值创建一个新表,其中重复 应该被跳过,剩下的唯一值需要通过合并为 新的。
  3. 结果表中的id列应具有“唯一”和“自动增量”属性。

1 个答案:

答案 0 :(得分:0)

此答案使用一条准备好的语句,很多人会对此感到悲伤,因此请确保您意识到SQL注入的风险。

-- Create some tables, drop them if they exist already.
DROP TABLE IF EXISTS Table1_Data;

CREATE TABLE Table1_Data
(
Id INTEGER,
StoredValued VARCHAR(10)
);

DROP TABLE IF EXISTS Table2_Data;

CREATE TABLE Table2_Data
(
Id INTEGER,
StoredValued VARCHAR(10)
);

DROP TABLE IF EXISTS Table3_Data;

CREATE TABLE Table3_Data
(
Id INTEGER,
StoredValued VARCHAR(10)
);

DROP TABLE IF EXISTS Table4_Data;

CREATE TABLE Table4_Data
(
Id INTEGER,
StoredValued VARCHAR(10)
);

DROP TABLE IF EXISTS Result;

CREATE TABLE Result
(
Id INTEGER,
StoredValued VARCHAR(10)
);

-- Insert some data into the tables
INSERT INTO Table1_Data VALUES (1,'Test'),(2,'Testy'),(3,'Testing');
INSERT INTO Table2_Data VALUES (1,'Foo'),(2,'Fooby'),(3,'Foober');
INSERT INTO Table3_Data VALUES (1,'Bar'),(2,'oobar'),(3,'Barbo');
INSERT INTO Table4_Data VALUES (1,'Bar'),(2,'Testy'),(3,'JubJub');

-- Create a statement to execute
SELECT CONCAT('INSERT INTO Result',GROUP_CONCAT(' SELECT * FROM ',TABLE_SCHEMA,'.',TABLE_NAME SEPARATOR ' UNION ')) INTO @query
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME LIKE '%_Data';

-- Execute the statement
PREPARE stmt1 FROM @query; 
EXECUTE stmt1; 
DEALLOCATE PREPARE stmt1; 

-- Get the results from our new table.
SELECT *
FROM Result;