【问题标题】:Select all rows from all tables where column name equals given value从列名等于给定值的所有表中选择所有行
【发布时间】:2011-11-07 16:27:53
【问题描述】:

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

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

【问题讨论】:

  • 据我所知,一般来说,这样的事情将如何实现?很可能在许多不同的表中某个名称用于列名,并且在每种情况下数据类型都不同,这似乎会造成问题。

标签: mysql sql


【解决方案1】:

不是普通的 SQL。您不能将一个查询的结果用作外部查询中的表/字段名称。在你的非工作示例中,你会得到一个看起来像

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

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

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

但是,需要这样的动态查询通常是表设计不佳的标志。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-15
    • 1970-01-01
    • 2014-02-16
    • 1970-01-01
    • 2020-05-09
    • 1970-01-01
    相关资源
    最近更新 更多