【问题标题】:MySQL - SHOW COLUMNS from Multiple TablesMySQL - 从多个表中显示列
【发布时间】:2013-07-24 23:12:35
【问题描述】:

我正在尝试从 2 个表中获取列名。

我尝试了如下查询:(SHOW COLUMNS FROM users) UNION (SHOW COLUMNS FROM posts),但这不起作用并返回语法错误。我使用DESCRIBE 尝试了相同的查询,但这也不起作用。 如何在一个查询中从多个表中获取所有列名?可以吗?

【问题讨论】:

  • 如果有人感兴趣,我在this Answer 中写了一个Describe All Tables

标签: php mysql multiple-tables describe


【解决方案1】:

来自 5.0 版的文档 (http://dev.mysql.com/doc/refman/5.0/en/show-columns.html)

"SHOW COLUMNS displays information about the columns in a given table" 

所以你不能真正在多个表上使用它。但是,如果你有 information_schema 数据库,那么你可以像下面这样使用它:

select column_name 
from `information_schema`.`columns` 
where `table_schema` = 'mydb' and `table_name` in ('users', 'posts');

这里您必须将mydb 替换为您的数据库名称,或者只使用DATABASE()

【讨论】:

  • @Namphibian,哎呀! :)
  • 不用担心。所有关于事物的精神。
  • 是的!做到了!非常感谢!
【解决方案2】:

是的,使用 information_Schema 视图。

SELECT * FROM information_schema.columns
WHERE Table_Name=? OR Table_name=?;

使用它们,因为它们是查询数据库元数据的标准方式。

【讨论】:

    【解决方案3】:

    如果你也想得到表格列的名称,也可以从选择table_name中得到

    SELECT column_name, table_name 
    FROM `information_schema`.`columns` 
    WHERE `table_schema` = DATABASE() AND `table_name` in ('table1', 'table2');
    

    【讨论】:

      【解决方案4】:

      我假设您实际上想要列出连接中涉及的表的所有列。


      有一个巧妙的技巧可以在 select 语句中查看 qualified 表和列名。先EXPLAINselect查询,再看SHOW WARNINGS的结果:

      EXPLAIN SELECT * FROM users JOIN posts ON users.id = posts.user_id;
      SHOW WARNINGS;
      

      结果将如下所示:

      Level Code Message
      Note 1003 /* select#1 */ select `testdb`.`users`.`id` AS `id`,`testdb`.`users`.`name` AS `name`,`testdb`.`posts`.`id` AS `id`,`testdb`.`posts`.`user_id` AS `user_id`,`testdb`.`posts`.`name` AS `name` from `testdb`.`users` join `testdb`.`posts` where (`testdb`.`users`.`id` = `testdb`.`posts`.`user_id`)

      生成的查询包含 select 子句中所有列的完全限定名称,而不是 *

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-07-28
        • 1970-01-01
        • 2021-11-28
        • 2021-08-20
        相关资源
        最近更新 更多