Поиск уникальных комбинаций таблиц и столбцов в базах данных SQL - PullRequest
2 голосов
/ 06 ноября 2008

У меня есть 4 базы данных со схожими схемами, и я пытаюсь создать запрос для возврата только таблицы, пары столбцов, которые существуют ТОЛЬКО в базе данных 1 и не существуют в базе данных 2, 3 или 4.

В настоящее время я могу вернуть симметричную разницу между базой данных 1 и 2 с помощью следующего запроса ...

select table_name, column_name from (
        select table_name, column_name from [Database1].information_schema.columns
        union all
        select table_name, column_name from [Database2].information_schema.columns) as tmp
        group by table_name, column_name having count(*) = 1

Однако, пытаясь изолировать только эти столбцы в базе данных 1 и делая то же самое для всех 4 баз данных, все усложняется. Какое самое чистое решение для этого запроса?

Ответы [ 2 ]

1 голос
/ 06 ноября 2008

Я могу придумать это с первого выстрела, который может стать началом. Это не было проверено, хотя, может быть, просто другая альтернатива:

select table_name, column_name from [Database1].information_schema.columns d1
where table_name || '+' || column_name
not in (select table_name || '+' || column_name from [Database2].information_schema.columns)

and table_name || '+' || column_name
not in (select table_name || '+' || column_name from [Database3].information_schema.columns)

and table_name || '+' || column_name
not in(select table_name || '+' || column_name from [Database4].information_schema.columns)
1 голос
/ 06 ноября 2008
SELECT
     D1.table_name,
     D1.column_name
FROM
     Database1.information_schema.columns D1
LEFT OUTER JOIN Database2.information_schema.columns D2 ON
     D2.table_name = D1.table_name AND
     D2.column_name = D1.column_name
LEFT OUTER JOIN Database3.information_schema.columns D3 ON
     D3.table_name = D1.table_name AND
     D3.column_name = D1.column_name
LEFT OUTER JOIN Database4.information_schema.columns D4 ON
     D4.table_name = D1.table_name AND
     D4.column_name = D1.column_name
WHERE
     D2.table_name IS NULL AND
     D3.table_name IS NULL AND
     D4.table_name IS NULL
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...