Yanıtlar:
Sütunlarla columnA
veya ColumnB
veritabanındaki tüm tabloları almak için YourDatabase
:
SELECT DISTINCT TABLE_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME IN ('columnA','ColumnB')
AND TABLE_SCHEMA='YourDatabase';
DATABASE()
Seçili veritabanında arama yapmak için dize yerine de kullanabilirsiniz .
SELECT TABLE_NAME, COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME LIKE '%wild%';
TABLE_SCHEMA
bu sütun adını içeren tüm veritabanlarını + tabloları görmek için döndürme kümesinin alanlarına ekleyin .
show tables;
. Herkes bunun neden böyle olabileceğini açıklayabilir mi?
Daha basitçe SQL'in bir satırında yapılır:
SELECT * FROM information_schema.columns WHERE column_name = 'column_name';
Sahip olmayan sürümde information_schema
(eski sürümler veya bazı ndb'ler) tablo yapısını dökebilir ve sütunu manuel olarak arayabilirsiniz.
mysqldump -h$host -u$user -p$pass --compact --no-data --all-databases > some_file.sql
Şimdi some_file.sql
tercih ettiğiniz metin düzenleyicisini kullanarak sütun adını arayın veya bazı şık awk komut dosyaları kullanın.
Ve sütunu bulmak için basit bir sed komut dosyası, COLUMN_NAME yerine sizinki yazın:
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,
Dökümü doğrudan sed'de borulayabilirsiniz, ancak bu önemsizdir.
Bunun tersini arayanlar, yani belirli bir sütun adı içermeyen tablolar arayanlar için, sorgu burada ...
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');
Bu, InnoDB'nin özel ai_col
sütununu yavaşça uygulamaya başladığımızda ve 200 tablolarımızdan hangisinin henüz yükseltilmesi gerektiğini anlamaya ihtiyaç duyduğumuzda gerçekten kullanışlı oldu .
" Yalnızca tüm tabloları almak için " istiyorsanız , bu sorguyu kullanın:
SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME like '%'
and TABLE_SCHEMA = 'tresbu_lk'
" Sütunları olan tüm tabloları almak için " istiyorsanız , Bu sorguyu kullanın:
SELECT DISTINCT TABLE_NAME, COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE column_name LIKE '%'
AND TABLE_SCHEMA='tresbu_lk'
Bu tek satırlık sorguyu kullanın, istenen_ sütununu_adı sütun adınızla değiştirin.
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'
İnformation_schema ile ilgili sorun, çok yavaş olabilir olmasıdır. SHOW komutlarını kullanmak daha hızlıdır.
Veritabanını seçtikten sonra önce SHOW TABLES sorgusunu gönderirsiniz. Ve sonra her bir tablo için COLUMNS GÖSTER.
PHP'de böyle bir şey
$ res = mysqli_query ("TABLO GÖSTER"); while ($ row = mysqli_fetch_array ($ res)) {$ rs2 = mysqli_query ("COLUMNS from SHOW". $ row [0]); ($ rw2 = mysqli_fetch_array ($ rs2)) {if ($ rw2 [0] == $ hedef) .... } }
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';
);
Bu ^^, kabul edilen cevap gibi ColumnA VEYA ColumnB yerine ColumnA AND ColumnB içeren tabloları alacaktır.