2014-09-19 73 views
0

我想要在可更新视图中的order_id上加入5-20个表(可以更改)以从生产mysql数据库转储到stage mysql数据库。我有一个返回的所有表与 'ORDER_ID' 的列名称的查询:从SELECT返回的JOIN表名称

SELECT DISTINCT TABLE_NAME information_schema.columns在COLUMN_NAME = '的order_id'

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

SELECT * FROM target_tables JOIN target_tables ON ORDER_ID WHERE ORDER_ID> 20787

正确的语法是什么?

回答

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'修改为您的数据库名称。

+0

真棒,谢谢你 – Tom 2014-09-19 18:19:52