我需要知道是否可以使用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
答案 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