2016-03-28 12 views
1

あるテーブルに存在するすべての列を、別のテーブルに存在しないものを、Information_schemaで自己結合を使用して検索しようとしていますCOLUMN_NAME = COLUMN_NAME上にあ​​り、内部に参加しています。私は私のロジックが悪いのかを把握するように見えることはできません。あるテーブル内のすべての列を見つけようとしていません - 結合が機能していません

select c.Column_name, c2.Column_name 
from information_schema.columns c 
left outer join Information_Schema.Columns c2 
ON c.COLUMN_NAME = c2.column_name 
Where c.TABLE_NAME = 'Table1' 
and c2.TABLE_NAME = 'Table2' 

私は

Col1(a) | Col1(b) 
Col2(a) | null 
Col3(a) | Col3(b) 
Col4(a) | Col4(b) 
Col5(a) | null 

を取得する必要がありますが、これはなぜ代わりに私が

Col1(a) | Col1(b) 
Col3(a) | Col3(b) 
Col4(a) | Col4(b) 

を取得していますか?

答えて

3

フィルタテーブル結合はON句の中にある必要があります。 where句で指定すると、左側の結合は自動的に内側の結合に変わります。

select c.Column_name, c2.Column_name 
from information_schema.columns c 
left outer join Information_Schema.Columns c2 
ON c.COLUMN_NAME = c2.column_name AND c2.TABLE_NAME = 'Table2' 
Where c.TABLE_NAME = 'Table1' 
関連する問題