Mysql 按后缀选择具有相同列的所有表,并将它们合并到新表中

Mysql 按后缀选择具有相同列的所有表,并将它们合并到新表中,mysql,sql,phpmyadmin,Mysql,Sql,Phpmyadmin,我有一组结构(列)完全相同的任意表,所有表都有相同的后缀\u data 我所尝试的: CREATE TABLEglobal_dataAS SELECT*FROM(SELECT*FROMv_dataUNION ALL SELECT*FROMx_dataUNION ALL SELECT*FROMz_dataUNION ALL SELECT*FROMd_data)x GROUP BY('id')ORDER BY 1 但结果是,即使没有自动递增列,我也只能得到一行,但我需要每个表snd中存在的所有行,并

我有一组结构(列)完全相同的任意表,所有表都有相同的后缀
\u 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

但结果是,即使没有自动递增列,我也只能得到一行,但我需要每个表snd中存在的所有行,并带有自动递增列

因此,我需要的是一个SQL查询:

  • 按后缀选择所有表格
  • 使用合并的表值创建一个新表,其中 应跳过,剩余的唯一值需要合并到 新的
  • 结果表中的
    id
    列应具有唯一和自动递增属性
    这个答案使用了一个预先准备好的语句,这里的很多人都会为此感到悲伤,所以请确保您意识到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;
    

    这个答案使用了一个预先准备好的语句,这里的很多人都会为此感到悲伤,所以请确保您意识到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;
    

    需要更多关于数据结果应该如何显示的信息。目前,对于后缀,您可以使用columnname“like“%\u data”,需要有关数据结果应如何的详细信息。当前,对于后缀,您可以使用columnname“like“%\u data”