Saber si un campo existe en alguna tabla de MySQL

mysql logoHay ocasiones en que hemos descuidado las buenas prácticas ya sea por el hecho de no conocerlas, por el tiempo contra entrega o simplemente nos vemos trabajando el desarrollo de otro programador anterior que no nos haya dejado documentación adecuada y de buenas a primeras obtenemos un error relacionado a una consulta MySQL que puede estar haciendo referencia a un campo duplicado que no sabemos en que tabla o base de datos está.

Para determinar de una forma rápida cuál es la tabla dónde se encuentra dicho campo, usamos en MySQL la siguiente consulta, reemplazando obviamente a nombre_campo con el campo que tenemos duplicado y nombre_base_datos con el nombre de una de nuestras bases de datos.

select distinct TABLE_NAME
from information_schema.COLUMNS
where COLUMN_NAME = 'nombre_campo'
and TABLE_SCHEMA = 'nombre_base_datos';

Si queremos buscar más de un campo al mismo tiempo o más de una base de datos, lo que tenemos que hacer es simplemente reemplazar el igual a con un IN, lo hacemos de la siguiente manera:

select distinct TABLE_NAME
from information_schema.COLUMNS
where COLUMN_NAME in ('nombre_campo_1', 'nombre_campo_2')
and TABLE_SCHEMA in ('nombre_base_datos_1', 'nombre_base_datos_2');

Otra forma aún más eficiente en caso de tener varias bases de datos, es buscar en todas ellas, podemos hacerlo de una forma simple sin recurrir a escribir los nombres de cada una, solo tenemos que agregar una subconsulta. Igual aplica el usar el IN para los nombres de campos en caso de ser más de uno:

select distinct TABLE_NAME
from information_schema.COLUMNS
where COLUMN_NAME = ('nombre_campo')
and TABLE_SCHEMA in (select SCHEMA_NAME from information_schema.SCHEMATA);

Artículos relacionados

Deja tus comentarios