从表中查询,这是从Information_Schema.Tables结果派生的

Mac*_*eeE 5 php mysql subquery information-schema

我不得不从一个有50多个表的数据库进行查询 - 所有表都具有相同的结构(我知道,Horrid数据库设计来自一个已经生产了5年以上的遗留项目!).为此,我查询了information_Schema下面的内容:

    SELECT 
        TABLE_NAME 
    FROM 
        INFORMATION_SCHEMA.tables 
    WHERE TABLE_SCHEMA =
        'projectdatabase'   
            AND 
        TABLE_NAME LIKE '%_usertable'
Run Code Online (Sandbox Code Playgroud)

在结果中,它为我提供了我需要的50个左右的表.现在,我需要从每个表中查询列,例如,PRODUCT_ID.在这样做的过程中,我尝试过:

    SELECT 
        projectdatabase.userTable.PRODUCT_ID
    FROM (
        SELECT 
            TABLE_NAME as userTable 
        FROM 
            INFORMATION_SCHEMA.tables 
        WHERE TABLE_SCHEMA =
            'projectdatabase'   
                AND 
            TABLE_NAME LIKE '%_usertable'
    ) AS userTables
Run Code Online (Sandbox Code Playgroud)

现在,这显然是行不通的,由于MySQL的不治疗的"用户表"数据库表-但我试图做的,就是查询* FROM {tablename}哪里tablenameinformation_schema查询结果.

我可以尝试在PHP中拆分它,虽然我急切地想知道这是否可以在MySQL内完成.

Ada*_*dam 5

你必须使用预备声明:

 SET @sql:=(SELECT GROUP_CONCAT(
            CONCAT("SELECT PRODUCT_ID FROM ", TABLE_NAME) SEPARATOR " UNION ")
   FROM INFORMATION_SCHEMA.tables 
   WHERE TABLE_SCHEMA = 'projectdatabase'   
            AND TABLE_NAME LIKE '%_usertable');
 PREPARE stmt FROM @sql;
 EXECUTE stmt;
Run Code Online (Sandbox Code Playgroud)

编辑:你也可以设置SET SESSION group_concat_max_len = 1000000;,但在SQL中做所有事情都不是一件容易的事情.您的表列表是一种常量,查询将在您的PHP代码中处于更好的位置.