嘗試此(未測試):
UPDATE SomeTable
SET MyColumn1 = (SELECT SomeValue
FROM WhereverTable),
MyColumn2 = MyColumn1 * (SELECT AnotherValue
FROM AnotherTable)
WHERE MyColumn4 = 'condition';
本標準SQL-92語法要求標量子查詢即兩個WhereverTable
和AnotherTable
必須將每個包括零個或一個行。更常見的情況是,這些行需要在子查詢中使用標識符(或條件或類似)進行「關聯」,並且在UPDATE
陳述中的SET
子句和WHERE
子句中都這樣做,例如, (SQL-92,未經測試):
UPDATE SomeTable
SET MyColumn1 = (
SELECT wt.SomeValue
FROM WhereverTable AS wt
WHERE wt.some_table_ID = SomeTable.some_table_ID
),
MyColumn2 = MyColumn1 * (
SELECT av.AnotherValue
FROM AnotherTable AS av
WHERE wt.another_table_ID = SomeTable.another_table_ID
)
WHERE MyColumn4 = 'condition'
AND EXISTS (
SELECT *
FROM WhereverTable AS wt
WHERE wt.some_table_ID = SomeTable.some_table_ID
)
OR EXISTS (
SELECT *
FROM AnotherTable AS av
WHERE wt.another_table_ID = SomeTable.another_table_ID
);
這可以通過使用SQL-99的MERGE
聲明給少 '重複' 的代碼重寫。
表格如何關聯?其他表格中是否有多於一排? – 2011-05-05 21:36:37
SomeTable,WhereverTable和AnotherTable都是不相關的。您可以假定SELECT語句全部只返回一個值。我唯一的問題是更新MyColumn2 – 2011-05-05 21:43:52