Sql 在许多表中查找公共值

Sql 在许多表中查找公共值,sql,impala,Sql,Impala,我有5个表,我想在一列中找到它们之间的公共值。列名称在两个表中不同(帐户编号、帐户、帐户id) 我尝试了上述方法,每次都会将内部联接的最后一个结果与新结果进行比较,但这似乎是错误的。您的方法可以,但它可以返回重复的结果。另一种方法是使用union all: select account from ((select account, 'a' as which from db.table1) union all (select account_id, 'b' as which from

我有5个表,我想在一列中找到它们之间的公共值。列名称在两个表中不同(帐户编号、帐户、帐户id)


我尝试了上述方法,每次都会将内部联接的最后一个结果与新结果进行比较,但这似乎是错误的。

您的方法可以,但它可以返回重复的结果。另一种方法是使用
union all

select account
from ((select account, 'a' as which from db.table1) union all
      (select account_id, 'b' as which from db.table2) union all
      (select account_number, 'c' as which from db.table3) union all
      (select account_number, 'd' as which from db.table4) union all
      (select account_number, '3' as which from db.table5) 
     ) t
group by account
having count(distinct which) = 5;

请注意,这可以很容易地进行调整,以获得三个或四个表中的帐户,而不是所有表中的帐户。

使用一些示例数据会很有帮助。非常感谢。你能帮我理解一下有计数(不同的)=5吗?@Thkas。这是计算帐户所在表的数量。您希望所有五个表中都有帐户。
select account
from ((select account, 'a' as which from db.table1) union all
      (select account_id, 'b' as which from db.table2) union all
      (select account_number, 'c' as which from db.table3) union all
      (select account_number, 'd' as which from db.table4) union all
      (select account_number, '3' as which from db.table5) 
     ) t
group by account
having count(distinct which) = 5;