Antworten:
So rufen Sie alle Tabellen mit Spalten columnA
oder ColumnB
in der Datenbank ab YourDatabase
:
SELECT DISTINCT TABLE_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME IN ('columnA','ColumnB')
AND TABLE_SCHEMA='YourDatabase';
DATABASE()
anstelle einer Zeichenfolge auch in der aktuell ausgewählten Datenbank suchen.
SELECT TABLE_NAME, COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME LIKE '%wild%';
TABLE_SCHEMA
zu den Feldern des Rückgabesatzes hinzu, um alle Datenbanken + Tabellen anzuzeigen, die diesen Spaltennamen enthalten.
show tables;
. Kann jemand erklären, warum dies der Fall sein könnte?
Einfacher in einer SQL-Zeile erledigt:
SELECT * FROM information_schema.columns WHERE column_name = 'column_name';
In Versionen, die keine haben information_schema
(ältere Versionen oder einige ndbs), können Sie die Tabellenstruktur sichern und die Spalte manuell durchsuchen.
mysqldump -h$host -u$user -p$pass --compact --no-data --all-databases > some_file.sql
Suchen Sie nun den Spaltennamen some_file.sql
mit Ihrem bevorzugten Texteditor oder verwenden Sie einige raffinierte awk-Skripte.
Und ein einfaches sed-Skript, um die Spalte zu finden, ersetzen Sie einfach COLUMN_NAME durch Ihre:
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,
Sie können den Dump direkt in sed leiten, aber das ist trivial.
Für diejenigen, die nach der Umkehrung davon suchen, dh nach Tabellen suchen, die keinen bestimmten Spaltennamen enthalten, ist hier die Abfrage ...
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');
Dies war sehr praktisch, als wir langsam die Verwendung der speziellen ai_col
Spalte von InnoDB implementierten und herausfinden mussten, welche unserer 200 Tabellen noch aktualisiert werden mussten.
Wenn Sie " Nur alle Tabellen abrufen " möchten , verwenden Sie diese Abfrage:
SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME like '%'
and TABLE_SCHEMA = 'tresbu_lk'
Wenn Sie " Alle Tabellen mit Spalten abrufen " möchten , verwenden Sie diese Abfrage:
SELECT DISTINCT TABLE_NAME, COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE column_name LIKE '%'
AND TABLE_SCHEMA='tresbu_lk'
Verwenden Sie diese einzeilige Abfrage und ersetzen Sie den gewünschten Spaltennamen durch Ihren Spaltennamen.
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'
Das Problem mit information_schema ist, dass es furchtbar langsam sein kann. Die Verwendung der SHOW-Befehle ist schneller.
Nachdem Sie die Datenbank ausgewählt haben, senden Sie zuerst die Abfrage SHOW TABLES. Und dann machen Sie SHOW COLUMNS für jede der Tabellen.
In PHP würde das ungefähr so aussehen
$ 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';
);
Das ^^ erhält die Tabellen mit ColumnA AND ColumnB anstelle von ColumnA OR ColumnB wie die akzeptierte Antwort