获取所需结果以使用sql查询检索不存在的数据

时间:2014-04-16 15:43:36

标签: sql oracle

我需要知道是否可以使用sql查询检索不存在的数据。 Production表有三个colums,有4个记录,但Product2没有Media2记录,Product3没有Media1记录,我想用0值显示这些不存在的记录:

Products       Media      CNT  
------------------------------------------------------------------------  
Product1     Media1        5  
Product1     Media2        7  
Product2     Media1       30  
Product3     Media2       12  

和我想要的结果(如果可能的话)将是:

Products       Media      CNT  
------------------------------------------------------------------------  
Product1     Media1        5  
Product1     Media2        7  
Product2     Media1       30  
Product2     Media2        0  
Product3     Media1       0  
Product3     Media2       12 

1 个答案:

答案 0 :(得分:1)

正如评论中提到的那样 - 你必须规范你的模型。 从技术上讲,您需要获得独特产品和媒体价值的笛卡尔联盟,但是 对于大型表,由于性能问题,这将是不可接受的方法:

SQL> with t 
  2  as (
  3  select 'Product1' Products,'Media1' Media, 5 CNT  from dual union all
  4  select 'Product1','Media2', 7  from dual union all
  5  select 'Product2','Media1', 30  from dual union all
  6  select 'Product3','Media2', 12  from dual
  7  )
  8  ,
  9  cart_t as (select p.products, g.media
 10  from (select unique products from t) p, (select unique media from t) g)
 11  select cart_t.products, cart_t.media, nvl(CNT,0) cnt from t ,  cart_t
 12  where cart_t.products = t.products(+)
 13  and cart_t.media = t.media(+)
 14  order by 1,2
 15  /

PRODUCTS MEDIA         CNT                                                      
-------- ------ ----------                                                      
Product1 Media1          5                                                      
Product1 Media2          7                                                      
Product2 Media1         30                                                      
Product2 Media2          0                                                      
Product3 Media1          0                                                      
Product3 Media2         12