从"show tables"MySQL查询中选择数据

53 mysql sql metadata

是否有可能从show tablesMySQL中选择?

SELECT * FROM (SHOW TABLES) AS `my_tables`
Run Code Online (Sandbox Code Playgroud)

沿着这些方向的东西,虽然以上不起作用(至少在5.0.51a).

And*_*rew 42

我想你想要的 SELECT * FROM INFORMATION_SCHEMA.TABLES

请参见http://dev.mysql.com/doc/refman/5.0/en/tables-table.html

  • 这为OP提供了关于表的(meta)信息,而不是表的内容. (8认同)

Luc*_*man 20

不是我所知道的,除非你选择INFORMATION_SCHEMA,正如其他人所提到的那样.

但是,该SHOW命令非常灵活,例如:

SHOW tables like '%s%'
Run Code Online (Sandbox Code Playgroud)

  • 这为OP提供了关于表的(meta)信息,而不是表的内容. (5认同)

Iva*_*rer 12

数数:

SELECT COUNT(*) as total FROM (SELECT TABLE_NAME as tab, TABLES.* FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='database_name' GROUP BY tab) tables;
Run Code Online (Sandbox Code Playgroud)

要列出:

SELECT TABLE_NAME as table, TABLES.* FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='database_name' GROUP BY table;
Run Code Online (Sandbox Code Playgroud)


Bil*_*win 5

您不能SHOW像示例中那样将语句放入子查询中。可以进入子查询的唯一语句是SELECT.

正如其他答案所述,您可以直接查询 INFORMATION_SCHEMASELECT并以这种方式获得更大的灵活性。

MySQL 的SHOW语句在内部只是对 INFORMATION_SCHEMA 表的查询。

用户@physicalattraction 在大多数其他答案上发布了此评论:

这为您提供了有关表格的(元)信息,而不是表格的内容,正如 OP 所期望的那样。– 物理吸引力

相反,OP的问题并没有说他们要选择所有表中的数据。他们说他们想从 的结果中进行选择SHOW TABLES,这只是一个表名列表。

如果 OP 确实想要从所有表中选择所有数据,那么答案是否定的,您不能通过一个查询来完成。每个查询必须明确命名其表。您不能使表名成为变量或同一查询的另一部分的结果。此外,给定查询结果的所有行必须具有相同的列。

因此,从所有表中选择所有数据的唯一方法是运行SHOW TABLES,然后为该结果中命名的每个表运行另一个查询。


Bob*_*ein 5

您可能比您想象的更接近 — SHOW TABLES 的行为已经很像 SELECT 语句。这是一个PHP示例,说明如何获取其“行”:

$pdo = new PDO("mysql:host=$host;dbname=$dbname",$user,$pass);
foreach ($pdo->query("SHOW TABLES") as $row) {
    print "Table $row[Tables_in_$dbname]\n";
}
Run Code Online (Sandbox Code Playgroud)

SHOW TABLES 的行为类似于单列表上的 SELECT。该列名称Tables_in_加上数据库名称。


小智 4

您是否考虑过查询 INFORMATION_SCHEMA.Tables?如在

SELECT ic.Table_Name,
    ic.Column_Name,
    ic.data_Type,
    IFNULL(Character_Maximum_Length,'') AS `Max`,
    ic.Numeric_precision as `Precision`,
    ic.numeric_scale as Scale,
    ic.Character_Maximum_Length as VarCharSize,
    ic.is_nullable as Nulls, 
    ic.ordinal_position as OrdinalPos, 
    ic.column_default as ColDefault, 
    ku.ordinal_position as PK,
    kcu.constraint_name,
    kcu.ordinal_position,
    tc.constraint_type
FROM INFORMATION_SCHEMA.COLUMNS ic
    left outer join INFORMATION_SCHEMA.key_column_usage ku
        on ku.table_name = ic.table_name
        and ku.column_name = ic.column_name
    left outer join information_schema.key_column_usage kcu
        on kcu.column_name = ic.column_name
        and kcu.table_name = ic.table_name
    left outer join information_schema.table_constraints tc
        on kcu.constraint_name = tc.constraint_name
order by ic.table_name, ic.ordinal_position;
Run Code Online (Sandbox Code Playgroud)

  • 这为您提供了有关表的(元)信息,而不是表的内容,正如OP预期的那样。 (3认同)