Jawaban:
Untuk mendapatkan semua tabel dengan kolom columnA
atau ColumnB
dalam database YourDatabase
:
SELECT DISTINCT TABLE_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME IN ('columnA','ColumnB')
AND TABLE_SCHEMA='YourDatabase';
DATABASE()
alih-alih string untuk mencari di database yang saat ini dipilih.
SELECT TABLE_NAME, COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME LIKE '%wild%';
TABLE_SCHEMA
ke bidang pengembalian diatur untuk melihat semua database + tabel yang berisi nama kolom itu.
show tables;
. Adakah yang bisa menjelaskan mengapa ini bisa terjadi?
Lebih sederhana dilakukan dalam satu baris SQL:
SELECT * FROM information_schema.columns WHERE column_name = 'column_name';
Dalam versi yang tidak memiliki information_schema
(versi yang lebih lama, atau beberapa ndb), Anda dapat membuang struktur tabel dan mencari kolom secara manual.
mysqldump -h$host -u$user -p$pass --compact --no-data --all-databases > some_file.sql
Sekarang cari nama kolom some_file.sql
menggunakan editor teks pilihan Anda, atau gunakan beberapa script awk bagus.
Dan skrip sed sederhana untuk menemukan kolom, cukup ganti COLUMN_NAME dengan milik Anda:
sed -n '/^USE/{h};/^CREATE/{H;x;s/\nCREATE.*\n/\n/;x};/COLUMN_NAME/{x;p};' <some_file.sql
USE `DATABASE_NAME`;
CREATE TABLE `TABLE_NAME` (
`COLUMN_NAME` varchar(10) NOT NULL,
Anda dapat menyalurkan dump langsung ke sed tetapi itu sepele.
Bagi mereka yang mencari kebalikan dari ini, yaitu mencari tabel yang tidak mengandung nama kolom tertentu, berikut adalah kueri ...
SELECT DISTINCT TABLE_NAME FROM information_schema.columns WHERE
TABLE_SCHEMA = 'your_db_name' AND TABLE_NAME NOT IN (SELECT DISTINCT
TABLE_NAME FROM information_schema.columns WHERE column_name =
'column_name' AND TABLE_SCHEMA = 'your_db_name');
Ini sangat berguna ketika kami mulai menerapkan penggunaan ai_col
kolom khusus InnoDB secara perlahan dan perlu mencari tahu dari 200 tabel kami mana yang belum ditingkatkan.
Jika Anda ingin "Hanya mendapatkan semua tabel ", Kemudian gunakan kueri ini:
SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME like '%'
and TABLE_SCHEMA = 'tresbu_lk'
Jika Anda ingin " Untuk mendapatkan semua tabel dengan Kolom ", Kemudian gunakan kueri ini:
SELECT DISTINCT TABLE_NAME, COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE column_name LIKE '%'
AND TABLE_SCHEMA='tresbu_lk'
Gunakan kueri satu baris ini, ganti nama_kolom yang diinginkan dengan nama kolom Anda.
SELECT TABLE_NAME FROM information_schema.columns WHERE column_name = 'desired_column_name';
SELECT DISTINCT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME LIKE '%city_id%' AND TABLE_SCHEMA='database'
Masalah dengan information_schema adalah bisa sangat lambat. Lebih cepat menggunakan perintah SHOW.
Setelah Anda memilih basis data, Anda terlebih dahulu mengirim kueri SHOW TABLES. Dan kemudian Anda melakukan SHOW COLUMNS untuk masing-masing tabel.
Dalam PHP itu akan terlihat seperti
$ res = mysqli_query ("SHOW TABLES"); while ($ row = mysqli_fetch_array ($ res)) {$ rs2 = mysqli_query ("SHOW COLUMNS FROM". $ row [0]); while ($ rw2 = mysqli_fetch_array ($ rs2)) {if ($ rw2 [0] == $ target) .... } }
select distinct table_name
from information_schema.columns
where column_name in ('ColumnA')
and table_schema='YourDatabase';
and table_name in
(
select distinct table_name
from information_schema.columns
where column_name in ('ColumnB')
and table_schema='YourDatabase';
);
Itu ^^ akan mendapatkan tabel dengan ColumnA DAN ColumnB bukan ColumnA ATAU ColumnB seperti jawaban yang diterima