8

私はこのようなことを達成しようとしています:

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

1回のクエリでこれを行う方法はありますか?

4

2 に答える 2

2

このようにそれを行う方法はありません。このSHOW CREATE TABLEコマンドはデータセットを取得しますが、結果を別のテーブルと結合することはできません。SHOW CREATE TABLEアプリケーションで必要なテーブルごとに個別のコマンドとして実行します。

于 2012-12-05T07:21:09.277 に答える
1

SHOW CREATEDevartは、ステートメントに参加できないということは正しいです。ただし、正確なニーズに応じて、独自の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 に答える