Respuestas:
Para obtener todas las tablas con columnas columnA
o ColumnB
en la base de datos YourDatabase
:
SELECT DISTINCT TABLE_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME IN ('columnA','ColumnB')
AND TABLE_SCHEMA='YourDatabase';
DATABASE()
lugar de una cadena para buscar en la base de datos seleccionada actualmente.
SELECT TABLE_NAME, COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME LIKE '%wild%';
TABLE_SCHEMA
a los campos del conjunto de retorno para ver todas las bases de datos + tablas que contienen ese nombre de columna.
show tables;
. ¿Alguien puede explicar por qué este podría ser el caso?
Más simplemente hecho en una línea de SQL:
SELECT * FROM information_schema.columns WHERE column_name = 'column_name';
En la versión que no tiene information_schema
(versiones anteriores o algunas ndb) puede volcar la estructura de la tabla y buscar la columna manualmente.
mysqldump -h$host -u$user -p$pass --compact --no-data --all-databases > some_file.sql
Ahora busque el nombre de la columna some_file.sql
usando su editor de texto preferido, o use algunos scripts ingeniosos awk.
Y un simple script sed para encontrar la columna, simplemente reemplace COLUMN_NAME con el suyo:
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,
Puede canalizar el vertedero directamente en sed, pero eso es trivial.
Para aquellos que buscan el inverso de esto, es decir, que buscan tablas que no contienen un nombre de columna determinado, aquí está la consulta ...
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');
Esto fue muy útil cuando comenzamos a implementar lentamente el uso de la ai_col
columna especial de InnoDB y necesitábamos descubrir cuáles de nuestras 200 tablas aún no se habían actualizado.
Si desea " Para obtener todas las tablas solamente ", utilice esta consulta:
SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME like '%'
and TABLE_SCHEMA = 'tresbu_lk'
Si desea " Para obtener todas las tablas con columnas ", utilice esta consulta:
SELECT DISTINCT TABLE_NAME, COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE column_name LIKE '%'
AND TABLE_SCHEMA='tresbu_lk'
Use esta consulta de una línea, reemplace el nombre_columna_de_de_de_superior por el nombre de su columna.
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'
El problema con information_schema es que puede ser terriblemente lento. Es más rápido usar los comandos SHOW.
Después de seleccionar la base de datos, primero envía la consulta MOSTRAR TABLAS. Y luego haces SHOW COLUMNS para cada una de las tablas.
En PHP eso se vería algo así
$ res = mysqli_query ("MOSTRAR TABLAS"); while ($ row = mysqli_fetch_array ($ res)) {$ rs2 = mysqli_query ("MOSTRAR COLUMNAS DE". $ 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';
);
Eso ^^ obtendrá las tablas con Columna A Y Columna B en lugar de Columna A O Columna B como la respuesta aceptada