在许多表中查找共同值
Find common values in many tables
我有 5 个表,我想在一列中找到它们之间的共同值。列名在两个表中不同(account_number, account,account_id).
select * from db.table1 as a
INNER JOIN db.table2 as b
ON a.account = b.account_id
INNER JOIN db.table3 as c
ON a.account = c.account_number
INNER JOIN db.table4 as d
ON a.account = d.account_number
INNER JOIN db.table_5 as f
ON a.account = f.account_number;`
我尝试了上面的方法,每次都将内部连接的最后结果与新结果进行比较,但它似乎是错误的。
你的方法没问题,但它可以return重复。另一种方法是使用 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 个表,我想在一列中找到它们之间的共同值。列名在两个表中不同(account_number, account,account_id).
select * from db.table1 as a
INNER JOIN db.table2 as b
ON a.account = b.account_id
INNER JOIN db.table3 as c
ON a.account = c.account_number
INNER JOIN db.table4 as d
ON a.account = d.account_number
INNER JOIN db.table_5 as f
ON a.account = f.account_number;`
我尝试了上面的方法,每次都将内部连接的最后结果与新结果进行比较,但它似乎是错误的。
你的方法没问题,但它可以return重复。另一种方法是使用 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;
请注意,这可以很容易地进行调整,以获取三个或四个表格中的帐户,而不是所有表格中的帐户。