4

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

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

4

4 回答 4

11

来自 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().

于 2013-07-24T23:24:37.873 回答
5

是的,使用 information_Schema 视图。

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

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

于 2013-07-24T23:25:15.763 回答
1

table_name如果您也想从选择中获取表列的名称

SELECT column_name, table_name 
FROM `information_schema`.`columns` 
WHERE `table_schema` = DATABASE() AND `table_name` in ('table1', 'table2');
于 2016-10-07T07:34:34.623 回答
0

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


有一个巧妙的技巧可以在 select 语句中查看限定的表名和列名。首先EXPLAIN选择查询,然后查看结果SHOW WARNINGS

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

结果将如下所示:

等级 代码 信息
笔记 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 子句中所有列的完全限定名称,而不是*.

于 2021-11-04T11:04:58.310 回答