SELECT column_name FROM(SELECT table_name FROM TABLE_OF_TABLES)

时间:2014-07-23 03:11:42

标签: mysql subquery union

我有一个名为TABLES的表。 TABLES有一个TABLE_NAME列。

对于每个TABLE_NAME,数据库中都有一个表。所有这些表的结构都是相同的。

最终我想从每个表中的UNION列。但我没有接近这个目标。

我坚持以下查询:

SELECT column_name FROM (SELECT table_name FROM TABLES) T;

返回的错误是"ERROR 1054 (42S22): Unknown column 'column_name' in 'filed list'.

我还没有看到SELECT...FROM (SELECT...FROM)

的良好代表

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

你可以尝试

SELECT column_name FROM (SELECT column_name FROM TABLES) T;

OR

SELECT column_name FROM (SELECT * FROM TABLES) T;

答案 1 :(得分:1)

使用静态查询无法实现此目的。如果由于某种原因确实需要这个,你必须使用动态SQL

SET @sql = NULL;

SELECT GROUP_CONCAT(CONCAT('SELECT column_name FROM `', table_name, '`') SEPARATOR ' UNION ALL ')
  INTO @sql
  FROM tables;

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

这是 SQLFiddle 演示

为简化调用方面的事情,您始终可以将其包装在存储过程中。