查找一个 table 而不是另一个 table 的列

Find columns that are one table and but not in the other table

我在 Snowflake 中使用两个非常宽的表(Table A,Table B)。两个表应具有完全相同的列,但不一定以相同的顺序。但是 Table B 缺少几列。有没有办法快速找到 Table A 但不在 Table B 中的所有列?我不关心数据,只关心列的存在。

本质上,我正在寻找一种 SQL 方法来查找 Table 中 Table B 中缺失的所有列。

我目前为此使用 ETL 工具。但是比较麻烦。如果可以使用 SQL.

来完成,那就太好了

尝试以下方法

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'
    );

您可以通过聚合来做到这一点:

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';

这是一个方便的结构,可以更轻松地推广到多个表。它确实假设这两个表在同一台服务器上。

下面的查询还给出了 Table B 中缺失的列。

SELECT column_name  FROM information_schema.columns  WHERE table_name = 'TableA'
MINUS
SELECT column_name  FROM information_schema.columns  WHERE table_name = 'TableB'