1
我的基本問題與我的查詢中指定的值一次更新多個列有關。我想這樣做的原因是我正在更新我的ginormous表中的值,所以我只想查詢一次以減少運行時間。這裏是返回我想要的列只有一個值的例子select語句的一個例子,我需要更新:TSQL - 哪裏更新多列的聲明
select a.Value
from Table1
left outer join
(
select ID, FilterCol1, FilterCol2, Value
from Table2
) a on a.ID = Table1.ID
where {Condition1a on FilterCol1}
and {Condition2a on FilterCol2}
爲了一次我希望能夠更新多列做這樣的事情這個(但它返回NULL):
Update T1
set T1Value1 = (select a.Value where {Condition1a on FilterCol1}
and {Condition2a on FilterCol2)
,T1Value2 = (select a.Value where {Condition1b on FilterCol1}
and {Condition2b on FilterCol2})
from Table1 T1
left outer join
(
select ID, FilterCol1, FilterCol2, Value
from Table2
) a on a.ID = Table1.ID
任何搞清楚了這一點,將不勝感激的幫助,讓我知道,如果你有任何問題,或者如果我犯了任何錯誤。謝謝!
編輯:我想我已經確定了這個問題,但我還不確定是否有解決方案。我認爲看到這個問題需要更多的上下文:表2中的選擇實際上是寬桌上的一個不透明選項。這意味着當應用left outer join
時,給定ID將會有多行。伯爵建議的案例陳述似乎在做什麼(並且我認爲這也在where子句中發生)正在比較我的條件和僅來自a的列的第一行。由於我的條件有助於確定選擇了a
中的哪些行,因此他們總是會爲第一行評估爲假(我知道這僅僅來自我對數據的瞭解),因此我的永久NULL
值。有誰知道一個解決方法來看看a
中的其他行嗎?
感謝您的回答伯爵,不幸的是這並沒有爲我工作(仍然返回null)。我想知道這是否會實際過濾將哪些值放入'T1ValueX'或過濾哪些行的Table1被更新。 「FilterCol(1,2)'是來自'Table2'的列,但是'Condition(1,2)(a,b,...)'正在查看'Table1'中的值嗎? –
你可以添加表格和樣本數據嗎? – EarlOfEnnui
WHERE子句將過濾更新的行。 CASE將選擇該值。如果您正確鏈接了表格的值,則無關緊要。鏈接表可能是剛接觸sql的人最容易被誤解的方面。我建議將來如果您有任何疑問,請添加一個表格和測試數據的創建。 – EarlOfEnnui