簡體   English   中英

sas sql update什么都不返回

[英]sas sql update returns nothing

我有2個表 - 父和子,每個有2列 - id和地址,地址看起來像這樣 -

\\ partNumber \\ a $ \\ sometext .... \\ - 對於孩子

和\\ 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錯誤,並在日志中顯示它對所有記錄進行了更新,因為最終結果我在桌子上什么也得不到。

您可以只使用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;

結果:

                   parent_
Obs    child_id       id      address                         parent_address

 1         1         501      \partNumber\a$\sometext....\    \partNumber\a$\
 2         2           .      no_parent

我不確定我是否可以幫助不知道測試表的來源。

無論如何, cn.dirPath like pn.dirPath & '%'很可能不會做你想要的。 嘗試cn.dirPath like trim(pn.dirPath) || '%' cn.dirPath like trim(pn.dirPath) || '%'

編輯:我添加了trim(),pn.dirPath可能會有尾隨空白。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM