引用子查询之外的字段

时间:2016-12-21 16:38:47

标签: sql

我有这张桌子:

enter image description here

另一张桌子:

enter image description here

我离开了第二个表到第一个表:

select
 planningitems.costtype_id,
 costcentercode_id,
 fv.fix,
 fv.var
from
 planningitems
left join 
(select
  fix,
  var,
  costtype_id,
  costcenter_id
 from fixvar
 where
  costcenter_id=10 or (costcenter_id=-1 and costtype_id not in (select costtype_id from fixvar where costcenter_id=10))
) as fv on fv.costtype_id=planningitems.costtype_id

它给出了正确的结果,但我想制作costcenter_id变量。我的意思是,我想将costcenter_id=10替换为costcenter_id=planningitems.costcentercode_id

怎么可能?

我使用firebird,但我认为,这是一个常见的sql问题。

1 个答案:

答案 0 :(得分:0)

我猜这是你想要的:

select pi.costtype_id, costcentercode_id, fv.fix, fv.var
from planningitems pi left join 
     fixvar fv
     on fv.costtype_id = pi.costtype_id and
        (fv.costcenter_id = pi.costcenter_id or
         fv.costcenter_id = -1 and
         fv.costtype_id not in (select fv2.costtype_id from fixvar fv2 where fv2.costcenter_id = pi.costcenter_id)
        );

查询中的逻辑非常难以理解。我非常确定有一种更简单的方法可以做你想做的事。您可以考虑使用示例数据和所需结果询问另一个问题。