最近一个客户提了这么一个要求:

有两张表,F1,F2,这两张表有3个的关键字:

K1:订单号
K2:订单公司
K3:订单类型

要求是统计F1/F2这两张表相同关键字下的记录数,比较是否一致

我简单做了个模型:

SQL> select * from f1;

        K1         K2         K3         K4
———- ———- ———- ———-
         1          1          1          1
         1          1          1          2
         1          1          2          1
         1          1          2          2
         1          1          2          3

SQL> select * from f2;

        K1         K2         K3         K4
———- ———- ———- ———-
         1          1          1          3
         1          1          1          4
         1          1          1          5
         2          2          2          1
         2          2          2          2
         2          2          2          3
         2          2          2          4

客户要求的输出如下:

       K1         K2         K3    F1COUNT    F2COUNT
——— ———- ———- ———- ———-
        1          1          1          2          3
        1          1          2          3          0
        2          2          2          0          4

歪歪曲曲的写了个”复杂”的SQL语句:

 select f1.k1,f1.k2,f1.k3,f1count,f2count from
    (select f1.k1,f1.k2,f1.k3,f1count,f2.k1,f2.k2,f2.k3,f2count f2count from
           (select f1.k1,f1.k2,f1.k3,count(1) f1count from f1 group by k1,k2,k3) f1
  full outer join
          (select f2.k1,f2.k2,f2.k3,count(1) f2count from f2 group by k1,k2,k3) f2 
          on  f1.k1=f2.k1 and f1.k2=f2.k2 and f1.k3=f2.k3));

我认为还应该有更简洁的写法,但暂时还没想到。

很多年不写语句了,暂记一下。想到好的再更新上来