私はこのようなことを達成しようとしています:
SELECT *
FROM information_schema.`tables`
JOIN (SHOW CREATE TABLE) # <-- need help here
WHERE table_schema LIKE 'tables\_%'
1回のクエリでこれを行う方法はありますか?
このようにそれを行う方法はありません。このSHOW CREATE TABLE
コマンドはデータセットを取得しますが、結果を別のテーブルと結合することはできません。SHOW CREATE TABLE
アプリケーションで必要なテーブルごとに個別のコマンドとして実行します。
SHOW CREATE
Devartは、ステートメントに参加できないということは正しいです。ただし、正確なニーズに応じて、独自の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) ;