如果我写这样的查询:
with foo as (
select
'foo' as name,
1 as value
union all select
'foo', 2
union all select
'foo', 3
union all select
'foo', 4
), bar as (
select
'bar' as name,
3 as value
union all select
'bar', 4
union all select
'bar', 5
union all select
'bar', 6
)
select
f.name,
b.value,
b.name
from
foo as f
full outer join
bar as b
on b.value = f.value;
我明白了:
name value name
foo (null) (null)
foo (null) (null)
foo 3 bar
foo 4 bar
(null) 5 bar
(null) 6 bar
这是我所期望的。但是,如果我尝试使用像这样的表值函数做类似的事情:
with allSizes as (
select cast('120X60' as character varying) as size
union all select '160X600'
union all select '1X1'
union all select '300X250'
union all select '728X90'
union all select '88X32'
union all select 'PEEL'
)
select
msd.region,
msd.market,
s.size,
msd.target,
msd.actual
from
marketdata('2013-01-05') as msd
full outer join
allSizes as s
on s.size = msd.size
where
msd.market = 'Foo, USA';
wheremarketdata()
是一个表值函数,我没有得到与函数size
中不存在的列相对应的空行marketdata()
。为什么不?