对问题的理解是解决问题的前提,今天遇到一个项目中的问题让我深刻的体会到这一点。
两个表:
T1
Term Domain WithAncestor
car x.com ?
bike y.com ?
car a.x.com ?
T2
Parent Domain
x.com a.x.com
求出T1中的WithAncestor的值。
设初始化为0,下面的做法是我的第一个版本:
Update T1 set WithAncestor=1
where Domain in
( select Domain
from T1 join T2 on T1.Domain=T2.Domain
join T1 B on T2.Parent=T1.Domain and T1.Term=B.Term)
)
这种解法的意思就是说:如果一个domain的父Domain也出现在表中,那么它的WithAncestor为1.
这种做法是错误,正确的方法应该是:如果一个keyWord出现在一个domain上,并且这个Keyword也出现在它的父亲domain上,那么withAncestor为1.
基于这种思想,正确的写法是:
Update T1
set WithAncestor=1
from T1 join T2 on T1.domain=T2.domain
join T1 B on T2.parent=B.domain and T1.term=B.term
这个写法会将T1中满足from的那些行改成对应的值。