SQL 使用-Update table

對問題的理解是解決問題的前提,今天遇到一個項目中的問題讓我深刻的體會到這一點。

 

兩個表:

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的那些行改成對應的值。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章