it-swarm-id.com

Pilih data dari "tampilkan tabel" kueri MySQL

Apakah mungkin untuk memilih dari show tables di MySQL?

SELECT * FROM (SHOW TABLES) AS `my_tables`

Sesuatu di sepanjang garis ini, meskipun di atas tidak berfungsi (pada 5.0.51a, setidaknya).

52
BioTronic

Saya pikir Anda ingin SELECT * FROM INFORMATION_SCHEMA.TABLES

Lihat http://dev.mysql.com/doc/refman/5.0/id/tables-table.html

42
Andrew

Bukan yang saya tahu, kecuali jika Anda memilih dari INFORMATION_SCHEMA, seperti yang disebutkan orang lain.

Namun, perintah SHOW cukup fleksibel, E.g .:

SHOW tables like '%s%'
20
Lucas Oman

Untuk menghitung:

SELECT COUNT(*) as total FROM (SELECT TABLE_NAME as tab, TABLES.* FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='database_name' GROUP BY tab) tables;

Daftar:

SELECT TABLE_NAME as table, TABLES.* FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='database_name' GROUP BY table;
11
Ivan Ferrer

Anda mungkin lebih dekat daripada yang Anda pikirkan - SHOW TABLES sudah banyak berperilaku seperti SELECT:

$pdo = new PDO("mysql:Host=$Host;dbname=$dbname",$user,$pass);
foreach ($pdo->query("SHOW TABLES") as $row) {
    print "Table $row[Tables_in_$dbname]\n";
}
4
Bob Stein

Sudahkah Anda melihat permintaan INFORMATION_SCHEMA.Tabel? Seperti dalam

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;
4
BigJim

Anda tidak dapat memasukkan pernyataan SHOW di dalam subquery seperti pada contoh Anda. Satu-satunya pernyataan yang bisa masuk dalam subquery adalah SELECT.

Seperti yang dinyatakan oleh jawaban lain, Anda dapat melakukan query INFORMATION_SCHEMA langsung dengan SELECT dan mendapatkan lebih banyak fleksibilitas seperti itu.

Pernyataan MySQL SHOW secara internal hanya berupa permintaan terhadap tabel INFORMATION_SCHEMA.

User @physicalattraction telah mengirim komentar ini pada sebagian besar jawaban lain:

Ini memberi Anda (meta) informasi tentang tabel, bukan isi tabel, seperti OP yang dimaksud. - Minat fisik

Sebaliknya, pertanyaan OP tidak tidak mengatakan bahwa mereka ingin memilih data di semua tabel. Mereka mengatakan ingin memilih dari hasil SHOW TABLES, yang hanya merupakan daftar nama tabel.

Jika OP ingin memilih semua data dari semua tabel, maka jawabannya tidak, Anda tidak dapat melakukannya dengan satu kueri. Setiap kueri harus memberi nama tabelnya secara eksplisit. Anda tidak bisa membuat nama tabel menjadi variabel atau hasil bagian lain dari kueri yang sama. Selain itu, semua baris hasil kueri yang diberikan harus memiliki kolom yang sama.

Jadi satu-satunya cara untuk memilih semua data dari semua tabel adalah dengan menjalankan SHOW TABLES dan kemudian untuk setiap tabel yang disebutkan dalam hasil itu, jalankan kueri lain.

4
Bill Karwin

Anda bisa membuat prosedur tersimpan dan memasukkan nama tabel dalam kursor, lalu memutari nama tabel Anda untuk menampilkan data.

Memulai dengan prosedur tersimpan: http://www.mysqltutorial.org/getting-started-with-mysql-stored-procedures.aspx

Membuat kursor: http://www.mysqltutorial.org/mysql-cursor/

Sebagai contoh,

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

Kemudian panggil prosedur tersimpan:

CALL ShowFromTables();
3
SELECT column_comment FROM information_schema.columns WHERE table_name = 'myTable' AND column_name = 'myColumnName'

Ini akan mengembalikan komentar pada: myTable.myColumnName

3
Brian

Saya pikir yang Anda inginkan adalah tampilan informasi_schema MySQL: http://dev.mysql.com/doc/refman/5.0/en/tables-table.html

3
Matt Rogish
SELECT * FROM INFORMATION_SCHEMA.TABLES

Itu harus menjadi awal yang baik. Untuk lebih lanjut, periksa Tabel INFORMATION_SCHEMA .

3
Sören Kuklau

di MySql 5.1 Anda bisa mencoba

show tables like 'user%';

output:

mysql> show tables like 'user%';

+----------------------------+

| Tables_in_test (user%) |

+----------------------------+

| user                       |

| user_password              |

+----------------------------+

2 rows in set (0.00 sec)
2
MT467

Ya, SELECT dari table_schema bisa sangat berguna untuk administrasi sistem. Jika Anda memiliki banyak server, database, tabel ... kadang-kadang Anda perlu DROP atau UPDATE banyak elemen. Misalnya untuk membuat kueri untuk DROP semua tabel dengan nama awalan "wp_old _...":

SELECT concat('DROP TABLE ', table_name, ';') FROM INFORMATION_SCHEMA.TABLES
WHERE table_schema = '*name_of_your_database*'
AND table_name LIKE 'wp_old_%';
2
Srdjan

Saya tidak mengerti mengapa Anda ingin menggunakan SELECT * FROM sebagai bagian dari pernyataan.

12.5.5.30. SHOW TABLES Syntax

1
Derek B. Bell