Sql 查找属于一个表但不在另一个表中的列

Sql 查找属于一个表但不在另一个表中的列,sql,snowflake-cloud-data-platform,information-schema,Sql,Snowflake Cloud Data Platform,Information Schema,我正在雪花中使用两张非常宽的桌子(表A、表B)。两个表应该有完全相同的列,尽管顺序不一定相同。然而,表B缺少一些列。有没有办法快速找到表a中但不在表B中的所有列?我不关心数据,只关心列的存在 本质上,我正在寻找一种SQL方法来查找表B中缺少的表中的所有列 我目前正在为此使用ETL工具。但这相当麻烦。如果可以使用SQL来完成,那就太好了。试试下面的方法 SELECT column_name FROM information_schema.columns WHERE table_name = 't

我正在雪花中使用两张非常宽的桌子(表A、表B)。两个表应该有完全相同的列,尽管顺序不一定相同。然而,表B缺少一些列。有没有办法快速找到表a中但不在表B中的所有列?我不关心数据,只关心列的存在

本质上,我正在寻找一种SQL方法来查找表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';

这是一个方便的结构,可以更容易地推广到多个表。它假定这两个表在同一台服务器上。

下面的查询还提供了表B中缺少的列

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