Найти столбцы, которые являются одной таблицей, но не находятся в другой таблице - PullRequest
0 голосов
/ 24 апреля 2020

Я работаю с двумя очень широкими таблицами (Таблица A, Таблица B) в Snowflake. Обе таблицы должны иметь одинаковые столбцы, но не обязательно в одинаковом порядке. Однако в таблице B отсутствуют несколько столбцов. Есть ли способ быстро найти все столбцы, которые находятся в таблице A, но не в таблице B? Меня не интересуют Данные, только существование столбцов.

По сути, я ищу SQL способ найти все столбцы в таблице, которые отсутствуют в таблице B.

В настоящее время я использую инструмент ETL для этого. Но это довольно громоздко. Было бы неплохо, если бы это можно было сделать с помощью SQL.

Ответы [ 3 ]

1 голос
/ 24 апреля 2020

Попробуйте следующее

SELECT column_name
FROM information_schema.columns 
WHERE table_name = 'tableA'
    AND column_name NOT IN
    (
        SELECT column_name
        FROM information_schema.columns 
        WHERE table_name = 'tableB'
    );
0 голосов
/ 07 мая 2020

В приведенном ниже запросе также указаны отсутствующие столбцы в таблице B.

SELECT column_name  FROM information_schema.columns  WHERE table_name = 'TableA'
MINUS
SELECT column_name  FROM information_schema.columns  WHERE table_name = 'TableB'
0 голосов
/ 24 апреля 2020

Вы можете сделать это с агрегацией:

SELECT column_name
FROM information_schema.columns 
WHERE table_name IN ('tableA', 'tableB')
GROUP BY column_name
HAVING MIN(table_name) = MAX(table_name) AND MIN(table_name) = 'TableA';

Это удобная структура, которая может быть легко обобщена для нескольких таблиц. Предполагается, что две таблицы находятся на одном сервере.

...