sas sql update什么都不返回

时间:2017-09-19 14:04:36

标签: sql sas proc-sql

我有2个表 - 父和子,每个有2列 - id和地址,地址看起来像这样 -

\ partNumber \ a $ \ sometext .... \ - for child

和\ partNumber \ a $ \ - 表示父。

我需要用2列创建一个表 - 对于我需要获取其父文件夹的每个子ID。 我试图通过使用sql

来实现这一点
update work.Test
set parent_id = ( select pn.DirId 
from work.Parent pn
join work.Child cn on cn.dirPath like pn.dirPath & '%'); 

刚刚尝试了另一种选择

update work.Test
set parent_id = ( select pn.DirId 
                  from work.Parent pn
                  join work.Child cn on 
                  cn.dirPath = substr(pn.dirPath, 1, index( '%', pn.dirPath) +1)); 

但结果仍然相同

即使它给我0错误,并在日志中显示它对所有更新 记录,作为最终结果,我在桌子上什么都没有。

2 个答案:

答案 0 :(得分:2)

您可以使用[Focus]比较来查找具有相似前缀的地址。

EQT

结果:

data child ;
  input child_id address $50. ;
cards;
1 \partNumber\a$\sometext....\
2 no_parent
;
data parent ;
  input parent_id address $50.;
cards;
501 \partNumber\a$\
;

proc sql ;
  create table want as 
    select a.child_id,b.parent_id,a.address,b.address as parent_address
    from child a 
    left join parent b
    on a.address eqt b.address
  ;
quit;

答案 1 :(得分:1)

我不确定我是否可以帮忙不知道测试表的来源。

无论如何,cn.dirPath like pn.dirPath & '%'很可能没有做你想做的事。试试cn.dirPath like trim(pn.dirPath) || '%'

编辑:我添加了trim(),pn.dirPath可能会有尾随空白。