sql查询能否固定行数,无结果显示空

A表中每行对应B表中0-2行,查询结果固定2行,没有的为空

img

你没说数据库类型和版本,我以oracle举例

select a.a,b.b
  from (select a.*, 1 od
          from test_table_a a
        union all
        select a.*, 2 od
          from test_table_a a) a
  left join (select b.*, row_number() over(partition by b.a order by b.b) od
               from test_table_b b) b
    on a.a = b.a
   and a.od = b.od
;

img

这个开窗函数,有一部分数据库是不支持的。
其实关键点在于,你想得到的记录数是A表的翻倍,但翻倍后,关联条件就不是唯一的,因此要构造一个虚拟的列,让它能和a字段一起定位唯一行。同理,在B表里也要有一个与之相匹配的列,在这里用到了开窗函数产生一个序号

先查出来只有一行的 union 个空的吧

用左连接查询。