select D.ID from UFIDA::U9::CBO::SCM::Customer::Customer as C inner join UFIDA::U9::Base::FlexField::ValueSet::DefineValue as D on
D.Code =C.Segment1 and D.ValueSetDef.Code='008'
上面的OQL看似没什么大问题,而且OQL引擎也可以将它翻译过来:
select A1.[ID] from CBO_Customer as A inner join Base_DefineValue as A1 on ((A1.[Code] = A.[Segment1]) and (A2.[Code] = '008')) left join [Base_ValueSetDef] as A2 on (A1.[ValueSetDef] = A2.[ID])
但是在执行的时候却报错:Error is: 无法绑定由多个部分组成的标识符 "A2.Code"。出现这个错误的原因是没有理解透彻inner join … on… 的使用方式。其实on子句是设置两个表连接的条件,D.ValueSetDef.Code='008' 并不是两个表关联的条件,而应该作为where条件。正确的写法如下:
select D.ID from UFIDA::U9::CBO::SCM::Customer::Customer as C inner join UFIDA::U9::Base::FlexField::ValueSet::DefineValue as D on
D.Code =C.Segment1 where D.ValueSetDef.Code='008'