8

我正在尝试完成这样的事情:

SELECT *
FROM   information_schema.`tables`
    JOIN (SHOW CREATE TABLE)  # <-- need help here
WHERE  table_schema LIKE 'tables\_%'

有没有办法在一个查询中做到这一点?

4

2 回答 2

2

没有办法以这种方式做到这一点。该SHOW CREATE TABLE命令检索数据集,但结果不能与另一个表连接。SHOW CREATE TABLE对应用程序中需要的每个表作为单独的命令执行。

于 2012-12-05T07:21:09.277 回答
1

Devart 是正确的,您不能加入该SHOW CREATE声明。但是,根据您的确切需求,您可以通过创建自己的SHOW CREATE语句来欺骗它。

如果您需要包含数据库引擎、列和表排序规则、索引等,代码的复杂性将会增加 - 但是下面的 SQL 将为您提供正确的表和字段,以及数据类型。我相信您可以通过information_schema.columns更深入地检查的内容来进一步扩展它。

SELECT CONCAT('CREATE TABLE `',t.TABLE_NAME,'` ',
  GROUP_CONCAT(CONCAT(c.COLUMN_NAME,' ',c.COLUMN_TYPE,' ',c.EXTRA) SEPARATOR ','),';') AS CreateStatement
FROM information_schema.tables t
INNER JOIN information_schema.columns c 
  ON t.TABLE_NAME=c.TABLE_NAME
/* WHERE STATEMENT IF NEEDED */;

样本输出:

CREATE TABLE `answers` rowid int(11) auto_increment,
  id int(11) ,username varchar(200) ,answer varchar(2000) ;
于 2012-12-14T14:01:07.263 回答