我想在可更新视图中加入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
正确的语法是什么?
答案 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'修改为您的数据库名称。