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

8

我想实现类似这样的效果:

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

有没有一种方法可以在一个查询中完成这个操作?
2个回答

2

这种方式无法实现。 SHOW CREATE TABLE 命令检索到数据集,但结果无法与另一张表进行连接。对于应用程序中所需的每个表,请单独执行 SHOW CREATE TABLE 命令。


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) ;

请注意,临时表不会在“information_schema.tables”中列出。 - Nae

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接