Я сравниваю таблицы базы данных на сервере разработки с живым сервером, ищет изменения имени столбца, новые столбцы и столбцы, которые были удалены. Я хотел бы сделать что-то вроде этого:
SELECT GROUP_CONCAT(Field) FROM (SHOW COLUMNS ON table_name) GROUP BY Field
То, что мне нужно, это список с разделителями-запятыми, который затем я могу взять на живой сервер и делать:
SHOW COLUMNS FROM table_name WHERE NOT IN ([comma-delimited list from above query])
Любые мысли о том, как лучше всего это сделать - либо исправляя меня в моем собственном подходе, либо другим способом все вместе? Очевидно, что указанный выше SQL не работает.
Примечание: серверы полностью разделены и могут не взаимодействовать друг с другом, поэтому прямое сравнение не возможно.ИЗМЕНИТЬ
Спасибо за ответы, ребята! Применяя ваши ответы на вопрос, это мой последний SQL, чтобы получить имена столбцов:
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'
Это дает мне список, который выглядит так:
'id', 'name', 'field1', 'field2'
Затем я могу использовать этот запрос для сравнения:
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')
Результаты представляют собой список любых столбцов, которые существуют в первой базе данных, а не во второй. Отлично!