创建临时表
CREATE table #_tmp1218 (A int,B int)插入数据
insert into #_tmp1218 values (1,2)
insert into #_tmp1218 values (23)
insert into #_tmp1218 values (3,4)用下面这个语句查询
select (select A from #_tmp1218 where #_tmp1218.A = b.B) from #_tmp1218 b查询结果为
上面这条语句,#_tmp1218与b 相交出一张9行数据的表
其中符合#_tmp1218.A = b.B的数据有两行
这个2/3/null的结果是怎么得来的呢?

解决方案 »

  1.   

    楼主这种写法没有相交9行数据,就是从#_tmp1218读取三行数据,数据内容是子查询内容,前两行查出来了,第三行没有查询到东西
      

  2.   

    这个是子查询
    先拿红色表b中字段[b]去表(#_tmp1218)中找字段A值相等的A值
    select (select A from #_tmp1218 where #_tmp1218.A = b.B) from #_tmp1218 b等同于如下SQL:
    select b.a
    from #_tmp1218 a
    left join #_tmp1218 b on a.b=b.A
      

  3.   

    读取三行数据?是A列的1、2、3吗?
    那2、3、null又是怎么来的?
      

  4.   

    很简单啊, 正好有能对应的, 就显示, 没有能对应的, 就 null 了
    你这个相当于 left join .
      

  5.   

    读取三行数据?是A列的1、2、3吗?
    那2、3、null又是怎么来的?
    因为读取的是子查询的内容,不是后边边的内容,这样试试就明白了
    select *,(select A from #_tmp1218 where #_tmp1218.A = b.B) from #_tmp1218 b
      

  6.   

    A  B
    (1,2)
    (2,3)   输出的第一行2是这里的2   (select A from #_tmp1218 where #_tmp1218.A = b.B
    (3,4)   输出的第二行3是这里的3