我有两张表,分别是 account_numbers 的 A 和 B。B 是 A 的子集。如何连接这两个表,以便在输出表中添加一个附加字段,其中公共元素(此处为 account_numbers)标记为 1,其余为 0
Table A
Account_Number
11
13
15
16
17
20
Table B
Account_Number
13
16
20
Output Table
Account Flag
11 0
13 1
15 0
16 1
17 0
20 1
我有两张表,分别是 account_numbers 的 A 和 B。B 是 A 的子集。如何连接这两个表,以便在输出表中添加一个附加字段,其中公共元素(此处为 account_numbers)标记为 1,其余为 0
Table A
Account_Number
11
13
15
16
17
20
Table B
Account_Number
13
16
20
Output Table
Account Flag
11 0
13 1
15 0
16 1
17 0
20 1
我认为解决此问题的最佳方法是使用left outer join
:
select a.account_number,
(case when b.account_number is null then 0 else 1 end) as flag
from A left outer join
B
on A.account_number = b.account_number;
尝试使用外连接而不是 group by 和 union all,它的性能会更好,尤其是对于大型表。
select a.account_number
, case
when b.account_number is not null then 1
else 0
end as flag
from a, b
where a.account_number *= b.account_number
SELECT account_number, COUNT(*)-1 AS flag
FROM (
SELECT account_number FROM A
UNION ALL
SELECT account_number FROM B
) AB
GROUP BY account_number;
查看此演示。让我知道它是否有效。