使用SQL将表B中的空值替换为表A中的值

时间:2019-04-01 20:42:22

标签: sql postgresql postgresql-performance

我有一个这样的表:

null

还有第二张桌子:

price_families (Table A):
ID     UPC      
1      123
1      456
2      789
2      111
1      121

我想要的是用同一产品系列的不同UPC的销售额/体积值替换表B中的空值(使用表A来确定价格系列,并加入UPC)并按销售说明进行订购,音量描述(每个价格系列)。

执行此操作的最佳方法是什么?我可以在这里使用Coalesce()还是案例说明?

我的输出应该是这样:

sales_volume (Table B): 
UPC    sales    volume  
123    13.99      2.99
456    null       null 
121    14.99      1.99
789    31.88     22.99
111    null       null 
121    null       null 

1 个答案:

答案 0 :(得分:2)

嗯。 。 。一种方法使用元组进行分配:

update b
    set (sales, volume) = (select b2.sales, b2.volume
                           from b b2 join
                                a
                                on b2.upc = a.upc
                           where b2.sales is not null and b2.volume is not null
                           order by b2.sales desc, b2.volume desc
                           limit 1
                          )
    where sales is null and volume is null;

编辑:

如果您只想使用select查询:

select b.upc,
       coalesce(b.sales, b2.sales) as sales,
       coalesce(b.volume, b2.volume) as volume
from b left join lateral
     (select b2.sales, b2.volume
      from b b2 join
           a
           on b2.upc = a.upc
      where b2.sales is not null and b2.volume is not null
      order by b2.sales desc, b2.volume desc
      limit 1
     ) b2
     on 1=1;