2017-10-10 19 views
1

私はいくつかの再調査を行っていますが、それほど多くは見つかりませんでした。 2つのテーブルを比較して、どのカラムがテーブル1にあるのかを知る必要がありますが、テーブル2にはありません。私はSnowflakeを使用しています。 は今、私はこの答えを見つけた:私は別にそれを実行する場合、私が実行した場合ので、snowflake、2つのテーブル間で不一致の列のリストを取得する(SQL)

SQL compilation error: invalid identifier TRANSIENT_STAGE_TABLE 

コードが正常に動作します:postgresql - get a list of columns difference between 2 tables

問題は、私は、コードを実行したときに、私はこのエラーを取得するということです:

SELECT column_name 
FROM information_schema.columns 
WHERE table_schema = 'your_schema' AND table_name = 'table2' 

私は実際に列名のリストを取得しますが、2番目の式にチェーンすると上記のエラーが返されます。 何が起こっているかについてのヒント? ありがとうございました

答えて

1

元の投稿からのクエリがうまくいくはずですが、おそらく一重引用符がどこかにありませんか?あなたはまた、両方のテーブルから、すべての列が一致していない見て少し複雑なクエリを書くことができます。この例

create or replace table xxx1(i int, j int); 
create or replace table xxx2(i int, k int); 

-- Query from the original post 
SELECT column_name 
FROM information_schema.columns 
WHERE table_name = 'XXX1' 
    AND column_name NOT IN 
    (
     SELECT column_name 
     FROM information_schema.columns 
     WHERE table_name = 'XXX2' 
    ); 
-------------+ 
COLUMN_NAME | 
-------------+ 
J   | 
-------------+ 

を参照してください:あなたはもちろんの唯一欠けている列を見つけるために、WHERE s1.column_name IS NULL or s2.column_name IS NULLを追加することができます

with 
s1 as (
    select table_name, column_name 
    from information_schema.columns 
    where table_name = 'XXX1'), 
s2 as (
    select table_name, column_name 
    from information_schema.columns 
    where table_name = 'XXX2') 
select * from s1 full outer join s2 on s1.column_name = s2.column_name; 
------------+-------------+------------+-------------+ 
TABLE_NAME | COLUMN_NAME | TABLE_NAME | COLUMN_NAME | 
------------+-------------+------------+-------------+ 
XXX1  | I   | XXX2  | I   | 
XXX1  | J   | [NULL]  | [NULL]  | 
[NULL]  | [NULL]  | XXX2  | K   | 
------------+-------------+------------+-------------+ 

また、列のタイプの違いを検出するために簡単に拡張することもできます。

関連する問題