[英]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.