Odpowiedzi:
Aby uzyskać wszystkie tabele z kolumnami columnA
lub ColumnB
w bazie danych YourDatabase
:
SELECT DISTINCT TABLE_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME IN ('columnA','ColumnB')
AND TABLE_SCHEMA='YourDatabase';
DATABASE()
zamiast ciągu znaków do wyszukiwania w aktualnie wybranej bazie danych.
SELECT TABLE_NAME, COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME LIKE '%wild%';
TABLE_SCHEMA
do pól zestawu zwrotnego, aby wyświetlić wszystkie bazy danych + tabele zawierające tę kolumnę.
show tables;
. Czy ktoś może wyjaśnić, dlaczego tak się dzieje?
Po prostu zrobione w jednym wierszu SQL:
SELECT * FROM information_schema.columns WHERE column_name = 'column_name';
W wersji, która nie ma information_schema
(starszych wersji lub niektórych ndb), możesz zrzucić strukturę tabeli i ręcznie przeszukać kolumnę.
mysqldump -h$host -u$user -p$pass --compact --no-data --all-databases > some_file.sql
Teraz wyszukaj nazwę kolumny some_file.sql
za pomocą preferowanego edytora tekstów lub użyj sprytnych skryptów awk.
I prosty skrypt sed, aby znaleźć kolumnę, wystarczy zastąpić COLUMN_NAME swoim:
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,
Możesz przesłać zrzut bezpośrednio do sed, ale to banalne.
Dla tych, którzy szukają odwrotności tego, tj. Szukają tabel, które nie zawierają określonej nazwy kolumny, oto zapytanie ...
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');
Przydało się to naprawdę, gdy zaczęliśmy powoli wdrażać specjalną ai_col
kolumnę InnoDB i potrzebowaliśmy dowiedzieć się, który z naszych 200 tabel wymagał jeszcze aktualizacji.
Jeśli chcesz „ Aby uzyskać tylko wszystkie tabele ”, użyj tego zapytania:
SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME like '%'
and TABLE_SCHEMA = 'tresbu_lk'
Jeśli chcesz „ Aby uzyskać wszystkie tabele z kolumnami ”, użyj tego zapytania:
SELECT DISTINCT TABLE_NAME, COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE column_name LIKE '%'
AND TABLE_SCHEMA='tresbu_lk'
Użyj tego jednowierszowego zapytania, zamień żądaną nazwę_kolumny na nazwę kolumny.
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'
Problem z Information_schema polega na tym, że może być strasznie powolny. Szybciej jest używać poleceń POKAŻ.
Po wybraniu bazy danych najpierw wysyłasz zapytanie POKAŻ TABELE. A potem robisz POKAŻ KOLUMNY dla każdego ze stolików.
W PHP wyglądałoby to mniej więcej tak
$ res = mysqli_query („SHOW TABLES”); while ($ row = mysqli_fetch_array ($ res)) {$ rs2 = mysqli_query („POKAŻ KOLUMNY OD”. $ wiersz [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';
);
To ^^ otrzyma tabele z Kolumną A ORAZ Kolumną B zamiast Kolumny A LUB Kolumny B, podobnie jak zaakceptowana odpowiedź