我有4个具有类似架构的数据库,并且我试图创建一个查询以仅返回表,列对,它们仅存在于数据库1中,而不存在于数据库2、3或4中。
目前,我可以通过以下查询返回数据库1和数据库2之间的对称差...
select table_name, column_name from ( select table_name, column_name from [Database1].information_schema.columns union all select table_name, column_name from [Database2].information_schema.columns) as tmp group by table_name, column_name having count(*) = 1 但是,在尝试仅隔离数据库1中的那些列并在所有4个数据库中执行相同操作时,事情变得越来越复杂。此查询最干净的解决方案是什么?
问题来源于stack overflow
SELECT D1.table_name, D1.column_name FROM Database1.information_schema.columns D1 LEFT OUTER JOIN Database2.information_schema.columns D2 ON D2.table_name = D1.table_name AND D2.column_name = D1.column_name LEFT OUTER JOIN Database3.information_schema.columns D3 ON D3.table_name = D1.table_name AND D3.column_name = D1.column_name LEFT OUTER JOIN Database4.information_schema.columns D4 ON D4.table_name = D1.table_name AND D4.column_name = D1.column_name WHERE D2.table_name IS NULL AND D3.table_name IS NULL AND D4.table_name IS NULL
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。