从列名称等于给定值的所有表中选择所有行

时间:2011-08-31 14:36:30

标签: mysql sql

有没有办法选择列名称与特定条件匹配的所有表中的所有行?我知道如何选择包含给定列名的所有表:

SELECT TABLE_NAME FROM information_schema.COLUMNS WHERE COLUMN_NAME = 'customer_id'

有没有办法使用拔出的表名来连接表?例如,这个(明显不正确的)查询尝试的东西会尝试。

SELECT * FROM (SELECT DISTINCT TABLE_NAME FROM information_schema.COLUMNS WHERE COLUMN_NAME = 'customer_id') WHERE customer_id = 1

1 个答案:

答案 0 :(得分:2)

不是普通的SQL。您不能将一个查询的结果用作外部查询中的表/字段名称。在您的非工作示例中,您将获得一个类似于

的结果集
+---------------+
| TABLE_NAME    |
+---------------+
| name_of_table |
+---------------+

然后尝试过滤customer_id字段,而内部结果中不存在该字段。

您可以在存储过程中动态构建查询语句,并按照此处的详细说明执行该语句:How To have Dynamic SQL in MySQL Stored Procedure

然而,需要这样的动态查询通常是表格设计不良的标志。