有没有办法选择列名称与特定条件匹配的所有表中的所有行?我知道如何选择包含给定列名的所有表:
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
答案 0 :(得分:2)
不是普通的SQL。您不能将一个查询的结果用作外部查询中的表/字段名称。在您的非工作示例中,您将获得一个类似于
的结果集+---------------+
| TABLE_NAME |
+---------------+
| name_of_table |
+---------------+
然后尝试过滤customer_id
字段,而内部结果中不存在该字段。
您可以在存储过程中动态构建查询语句,并按照此处的详细说明执行该语句:How To have Dynamic SQL in MySQL Stored Procedure
然而,需要这样的动态查询通常是表格设计不良的标志。