Мне нужно сравнить таблицы в двух базах данных и найти разницу в имени_ column_name, data_type, is_nullable, column_default. Я хочу, чтобы мой выход будетСравните таблицу структуры в двух разных базах данных и обратном разности
db1.table
id | int | NOT_NULL | AUTO_INCREMEMT
name | text | NOT_NULL |
YYYY | text | NOT_NULL |
ZZZZ | text | NOT_NULL |
db2.table
id | int | NOT_NULL | AUTO_INCREMEMT
name | text | NOT_NULL |
YYYY | text | |
Результат запроса я хочу
COLUMN_NAME | DATA_TYPE | IS_NULLABLE | COLUMN_DEFAULT
------------|-----------|-------------|---------------
YYYY | TEXT | NOT_NULL |
YYYY | TEXT | |
ZZZZ | TEXT | NOT_NULL |
То, что я до сих пор.
(SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_DEFAULT
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = 'table_1' AND table_schema = 'db1')
UNION
(SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_DEFAULT
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = 'table_1' AND table_schema = 'db2')
Результаты запроса я получаю
COLUMN_NAME | DATA_TYPE | IS_NULLABLE | COLUMN_DEFAULT
------------|-----------|----------------|---------------
id | INT | NOT_NULL | AUTO_INCREMEMT
name | TEXT | NOT_NULL |
YYYY | TEXT | NOT_NULL |
YYYY | TEXT | |
Это приближается, но возвращает слишком много строк и показывать только столбцы в обеих таблицах. Например, он не отображает столбец ZZZZ, но он возвращает столбец YYYY дважды, как ожидалось.
Отличное объяснение процесса. Спасибо. – dmgd