show tables
MySQLから選択することはできますか?
SELECT * FROM (SHOW TABLES) AS `my_tables`
これらの線に沿ったものですが、上記は機能しません (少なくとも 5.0.51a では)。
私はあなたが欲しいと思いますSELECT * FROM INFORMATION_SCHEMA.TABLES
http://dev.mysql.com/doc/refman/5.0/en/tables-table.htmlを参照してください。
INFORMATION_SCHEMA
他の人が言及したように、から選択しない限り、私が知っていることではありません。
ただし、SHOW
コマンドは非常に柔軟です。例:
SHOW tables like '%s%'
カウントする:
SELECT COUNT(*) as total FROM (SELECT TABLE_NAME as tab, TABLES.* FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='database_name' GROUP BY tab) tables;
リストするには:
SELECT TABLE_NAME as table, TABLES.* FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='database_name' GROUP BY table;
SHOW
例のように、サブクエリ内にステートメントを入れることはできません。サブクエリに入れることができる唯一のステートメントはSELECT
.
他の回答が述べているように、INFORMATION_SCHEMA を直接クエリして、SELECT
より多くの柔軟性を得ることができます。
MySQL のSHOW
ステートメントは、内部的には INFORMATION_SCHEMA テーブルに対する単なるクエリです。
ユーザー @physicalattraction は、他のほとんどの回答にこのコメントを投稿しました。
これにより、OPが意図したように、テーブルの内容ではなく、テーブルに関する(メタ)情報が得られます。– 身体的魅力
それどころか、OPの質問は、すべてのテーブルでデータを選択したいと言っているわけではありません。SHOW TABLES
彼らは、テーブル名のリストであるの結果から選択したいと言っています。
OP がすべてのテーブルからすべてのデータを選択したい場合、答えはノーです。1 つのクエリでは実行できません。各クエリは、そのテーブルに明示的に名前を付ける必要があります。テーブル名を変数にしたり、同じクエリの別の部分の結果にしたりすることはできません。また、特定のクエリ結果のすべての行に同じ列が含まれている必要があります。
したがって、すべてのテーブルからすべてのデータを選択する唯一の方法は、実行SHOW TABLES
してから、その結果で指定されたテーブルごとに別のクエリを実行することです。
SELECT * FROM INFORMATION_SCHEMA.TABLES
それは良いスタートになるはずです。詳細については、INFORMATION_SCHEMA テーブルを確認してください。
INFORMATION_SCHEMA.Tables のクエリを調べましたか? のように
SELECT ic.Table_Name,
ic.Column_Name,
ic.data_Type,
IFNULL(Character_Maximum_Length,'') AS `Max`,
ic.Numeric_precision as `Precision`,
ic.numeric_scale as Scale,
ic.Character_Maximum_Length as VarCharSize,
ic.is_nullable as Nulls,
ic.ordinal_position as OrdinalPos,
ic.column_default as ColDefault,
ku.ordinal_position as PK,
kcu.constraint_name,
kcu.ordinal_position,
tc.constraint_type
FROM INFORMATION_SCHEMA.COLUMNS ic
left outer join INFORMATION_SCHEMA.key_column_usage ku
on ku.table_name = ic.table_name
and ku.column_name = ic.column_name
left outer join information_schema.key_column_usage kcu
on kcu.column_name = ic.column_name
and kcu.table_name = ic.table_name
left outer join information_schema.table_constraints tc
on kcu.constraint_name = tc.constraint_name
order by ic.table_name, ic.ordinal_position;
あなたが望むのは MySQL の information_schema ビューだと思います: http://dev.mysql.com/doc/refman/5.0/en/tables-table.html
SELECT column_comment FROM information_schema.columns WHERE table_name = 'myTable' AND column_name = 'myColumnName'
これにより、次のコメントが返されます: myTable.myColumnName
はい、table_schema からの SELECT は、システム管理に非常に役立ちます。多くのサーバー、データベース、テーブルがある場合...時には、一連の要素を削除または更新する必要があります。たとえば、プレフィックス名が「wp_old_...」の DROP all テーブルのクエリを作成するには、次のようにします。
SELECT concat('DROP TABLE ', table_name, ';') FROM INFORMATION_SCHEMA.TABLES
WHERE table_schema = '*name_of_your_database*'
AND table_name LIKE 'wp_old_%';
ストアド プロシージャを作成し、テーブル名をカーソルに配置してから、テーブル名をループしてデータを表示できます。
ストアド プロシージャを使い始める: http://www.mysqltutorial.org/getting-started-with-mysql-stored-procedures.aspx
カーソルの作成: http://www.mysqltutorial.org/mysql-cursor/
例えば、
CREATE PROCEDURE `ShowFromTables`()
BEGIN
DECLARE v_finished INTEGER DEFAULT 0;
DECLARE c_table varchar(100) DEFAULT "";
DECLARE table_cursor CURSOR FOR
SELECT table_name FROM information_schema.tables WHERE table_name like 'wp_1%';
DECLARE CONTINUE HANDLER
FOR NOT FOUND SET v_finished = 1;
OPEN table_cursor;
get_data: LOOP
FETCH table_cursor INTO c_table;
IF v_finished = 1 THEN
LEAVE get_data;
END IF;
SET @s=CONCAT("SELECT * FROM ",c_table,";");
PREPARE stmt FROM @s;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END LOOP get_data;
CLOSE table_cursor;
END
次に、ストアド プロシージャを呼び出します。
CALL ShowFromTables();
SELECT * FROM
ステートメントの一部として使用する理由がわかりません 。