如何在子查询中使用SHOW CREATE TABLE?

时间:2012-12-05 04:20:19

标签: php mysql sql pdo

我试图完成这样的事情:

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

有没有办法在一个查询中执行此操作?

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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) ;

答案 2 :(得分:0)

我点了这个链接http://sql-info.de/mysql/examples/CREATE-TABLE-examples.html

SHOW CREATE TABLE应该返回到结果列:表名()和与create table脚本对应的文本。

然后,它应该看起来像这样:

SELECT *
FROM   information_schema.`tables` ts
INNER JOIN (SHOW CREATE TABLE) sct
ON(ts.table_name=sct.table)
WHERE  table_schema LIKE 'tables\_%'

我希望这会有所帮助。我现在无法试一试。