對問題的理解是解決問題的前提,今天遇到一個項目中的問題讓我深刻的體會到這一點。
兩個表:
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的那些行改成對應的值。