Sql 表的简单聚合/联接
我有两张表,A和B是账号。B是a的子集。如何连接这两个表,以便在输出表中添加一个附加字段,其中公共元素account_number标记为1,其余为0Sql 表的简单聚合/联接,sql,Sql,我有两张表,A和B是账号。B是a的子集。如何连接这两个表,以便在输出表中添加一个附加字段,其中公共元素account_number标记为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 结帐。让我知道它是否有效。我认为最好的方法是使用左外连接: 尝试使
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
结帐。让我知道它是否有效。我认为最好的方法是使用左外连接:
尝试使用外部联接而不是GROUPBY和UNIONALL,它的性能会更好,尤其是对于大型表
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
您是否尝试过任何东西,或者您是否希望其他人为您编写代码?什么数据库平台?Sybase@OldProgrammeraks G的可能副本,我对SQL非常陌生。这就是问题所在。当我按照输出表的要求进行左连接以包含所有元素时,我不知道如何添加一个字段来标记公共元素。非常感谢。这正是我想要的桌子的样子。@user1950075很乐意帮忙!戈登:这个也很好用。有助于澄清一些疑问。谢谢你和杨两人的帮助。@Yang的解决方案很聪明。另一方面,这通常会更好地使用索引,速度更快,在表A中保留重复项,并允许您轻松地使用A或B包含更多列。是的,我也有这个问题;如果有更多的列,count*-1可能不起作用。但杨的想法非常聪明,对我的质疑非常准确。再次感谢@GordonYes,Gordon也给出了这个解决方案。关于优化的宝贵提示。谢谢
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;
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