Sql 表的简单聚合/联接

Sql 表的简单聚合/联接,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 结帐。让我知道它是否有效。我认为最好的方法是使用左外连接: 尝试使

我有两张表,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

结帐。让我知道它是否有效。

我认为最好的方法是使用左外连接:


尝试使用外部联接而不是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