Estoy comparando las tablas de bases de datos en un servidor de desarrollo con un servidor activo, buscando los cambios de nombre de columna, nuevas columnas y columnas que se han eliminado. Me gustaría hacer algo como esto:Salida de grupo de SHOW COLUMNS en lista delimitada por comas
SELECT GROUP_CONCAT(Field) FROM (SHOW COLUMNS ON table_name) GROUP BY Field
lo que busco es una lista separada por comas que entonces puedo tomar para el servidor en vivo y hacer:
SHOW COLUMNS FROM table_name WHERE NOT IN ([comma-delimited list from above query])
Alguna idea sobre cómo Es mejor hacer esto, ya sea corrigiéndome en mi propio enfoque, o por otro medio todos juntos? Obviamente, el SQL anterior no funciona.
Nota: Los servidores están completamente separados y es posible que no se comuniquen entre sí, por lo que no es posible realizar una comparación directa.
EDITAR
Gracias por las respuestas, chicos! La aplicación de sus respuestas a la pregunta, esta es mi SQL final para obtener los nombres de columna:
SELECT CONCAT("'", GROUP_CONCAT(column_name ORDER BY ordinal_position SEPARATOR "', '"), "'") AS columns
FROM information_schema.columns
WHERE table_schema = 'db_name' AND table_name = 'tbl_name'
Eso me da una lista que tiene el siguiente aspecto:
'id', 'name', 'field1', 'field2'
entonces puedo utilizar esta consulta para comparar :
SELECT GROUP_CONCAT(column_name ORDER BY ordinal_position)
FROM information_schema.columns
WHERE table_schema = 'db_name' AND table_name = 'tbl_name' AND column_name NOT IN ('id', 'name', 'field1', 'field2')
Los resultados son una lista de las columnas que existen en la primera base de datos y no en la segunda. ¡Perfecto!
Gracias, Ike. Nick estuvo antes que tú, pero +1 por tu respuesta, ¡muy apreciado! –