从SELECT返回的JOIN表名

时间:2014-09-19 02:41:56

标签: mysql

我想在可更新视图中加入5-20个表(可能会更改),从生产mysql数据库转储到阶段mysql数据库。我有一个查询返回列名为'order_id'的所有表:

  

从INFORMATION_SCHEMA.COLUMNS中选择DISTINCT TABLE_NAME,其中COLUMN_NAME ='order_id'

让我们假装上面是'target_tables',以下是有效的语法

  

SELECT * FROM target_tables   加入target_tables    在order_id WHERE   order_id> 20787

正确的语法是什么?

1 个答案:

答案 0 :(得分:0)

您可以将此解决方案与NATURAL JOIN和准备好的声明一起使用。如果某些表具有相同名称的列并且您不想加入它们,则它可能无法按预期工作。您可以在NATURAL和JOIN之间添加关键字LEFT,以使用LEFT JOIN代替INNER JOIN。

SET @my_query := CONCAT(
    'SELECT * FROM ', (
        SELECT GROUP_CONCAT(TABLE_NAME SEPARATOR ' NATURAL JOIN ')
        FROM INFORMATION_SCHEMA.COLUMNS
        WHERE TABLE_SCHEMA = 'your_schema' AND COLUMN_NAME = 'order_id'
    ), ' WHERE order_id > 20787'
);
PREPARE stmt FROM @my_query;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

不要忘记将'your_schema'修改为您的数据库名称。