2017-03-22 53 views
3

我想了解合併搜索條件和所遇到下面的問題。合併搜索多個條件 - SQL服務器

表1

id groupid description 
-------------------------  
1  10  Good 
2  20  Better 

表2

id groupid description 
-------------------------  
1 10  Very Good 
1 20  Much Better 

我打算在同時存在於ID而只GROUPID = 20存在於目標表合併源(表1)進行定位(表2)。

下面是我寫

Merge table1 source 
Using table2 target ON (target.id = source.id AND target.groupid = 20) 

When Matched 
    Then update 
      set target.description = source.description 

我期待的輸出是

表2

id groupid description 
------------------------- 
1  10  Very Good 
1  20  Good 

但我不是100%肯定的ON子句中(合併搜索條件)有多種檢查條件target.id = source.id and target.groupid = 20。在這些多重條件下,結果是否始終可預測並符合上述預期?或者在這裏可預測性是一個問題,我應該在「何時匹配AND」條件下添加target.groupId = 20

+0

嗯,你說,表2是目標,但然後用它作爲你查詢的源。在我看來很好,否則......這是寫WHERE子句的另一種方式。 – scsimon

+1

table2,第2行:是不是id = 1一個錯誤? – Serg

+0

@ scsimon-感謝您指出錯字,編輯相同。 – 100pipers

回答

4

它看起來像你的加入是錯誤的。您要麼加入GROUPID,要麼數據不正確。

入世對集團

create table #table1 (id int, groupid int, description varchar(64)) 
create table #table2 (id int, groupid int, description varchar(64)) 

insert into #table1 values 
(1,10,'Good'), 
(2,20,'Better') 


insert into #table2 values 
(1,10,'Very Good'), 
(1,20,'Much Better') 


Merge #table2 t 
Using #table1 s 
ON (t.groupid = s.groupid AND t.groupid = 20) 
When Matched 
Then update 
set t.description = s.description; 

select * from #table2 

drop table #table2 
drop table #table1 

否則,沒有任何辦法從ID = 2關聯「更好」的地方ID = 1一行。這與ID列中的原始聯接條件不符。

基於OFF EDITED預期輸出

create table #table1 (id int, groupid int, description varchar(64)) 
create table #table2 (id int, groupid int, description varchar(64)) 

insert into #table1 values 
(1,10,'Good'), 
(2,20,'Better') 


insert into #table2 values 
(1,10,'Very Good'), 
(1,20,'Much Better') 


Merge #table2 t 
Using #table1 s 
ON (t.id = s.id)   --you could also put the and t.groupid = 20 here... 
When Matched and t.groupid = 20 
Then update 
set t.description = s.description; 

select * from #table2 

drop table #table2 
drop table #table1 
+0

@ scsimon-請問您可以重新查看輸出結果,我已編輯過這個問題。 – 100pipers

+0

@ 100pipers根據你的編輯編輯... – scsimon

+0

@ scsimon-有趣的是,在編輯的輸出中,當匹配條件時你已經把t.groupid = 20。我看到您的評論,它可以添加在條件以及。是否存在與性能相關的特定原因,即在匹配時添加了t.groupid = 20,還是傳統上正確? – 100pipers