我在使用子查詢進行更新時遇到了問題,其中子查詢應基於更新的單元格的某一行中的某個鍵返回值。通常,將與表如下工作:基於子查詢的T-SQL更新
╔══════════════════════════════╗
║ Key1 Key2 Value Other ║
╠══════════════════════════════╣
║ Key11 Key21 Val1 Other1 ║
║ Key12 Key22 Val2 Other2 ║
║ Key13 Key23 Val3 Other3 ║
║ Key14 Key24 Val4 Other4 ║
╚══════════════════════════════╝
而我願意做這樣的事情:
UPDATE Table T1
SET T1.Value = (SELECT T2.Other
FROM Table T2
WHERE T2.Key2 IN ("SOME CONSTRAINT"))
WHERE T1.Key1 = T2.Key2
我知道這是行不通的。外部where子句不能看到T2.Key2
。
其他情況將根據其他表更新一個表。
說Table1
是
╔═════════════════╗
║ Key Value ║
╠═════════════════╣
║ Key1 Val1 ║
║ Key2 Val2 ║
║ Key3 Val3 ║
║ Key4 Val4 ║
╚═════════════════╝
而且Table2
╔══════════════════════╗
║ OtherKey OtherValue ║
╠══════════════════════╣
║ Key1 Val1 ║
║ Key2 Val2 ║
║ Key3 Val3 ║
║ Key4 Val4 ║
╚══════════════════════╝
我想再次做這樣的事情
UPDATE Table1 T1
SET T1.Value = (SELECT T2.Value
FROM Table2 T2
WHERE "SOME CONDITION")
WHERE T1.Key = T2.OtherKey
再次外WHERE
無法看到子查詢中的關鍵。如果我在兩種情況下都沒有外部WHERE
,我會收到錯誤消息,即子查詢返回多個不允許的值。
這實際上沒有第二個WHERE
,如果它的INSERT
語句而不是UPDATE
之一,只有這樣,我設法得到這個工作的更新是與循環或光標。
第三種情況的概要將是如果我有一個結果集像(鍵,值)與儘可能多的值對,因爲我有更新的表中的行,並且想要將「值」分配給更新的列從集合上的「Key」和從行中的一些關鍵字被更新。
你有沒有看使用'UPDATE'用'JOIN'? – TTeeple
這是一種常見的方式來考慮由缺乏經驗的開發人員構建sql查詢。他們試圖將他們的數據集建立到查詢中,並將它們「粘合」在一起,而通常使用更簡潔的語法和語義可以達到相同的結果。 –