您想要更新my_temp_table2
的所有行中的Price
列?通過從my_table1
返回的單行中的percent
列的值?
下面是實現這一目標的一種方法:
UPDATE my_temp_table2 t
CROSS
JOIN (SELECT p.percent
FROM my_table1 p
WHERE p.importID = 1
ORDER BY p.percent
LIMIT 1
) q
SET t.Price = t.Price * q.percent
如果您的問題表示importID
是my_table1
的PRIMARY KEY
(或UNIQUE KEY
),你能避免內嵌視圖。內聯視圖查詢中LIMIT和ORDER BY子句的用途是確保返回不超過1行,並使結果具有確定性。 (還有其他的方法來做到這一點,例如MIN()
或MAX()
合計)
如果importID
是my_table1
獨一無二的,你可以簡化上面的查詢,只是引用該表,而不使用內嵌視圖:
UPDATE my_temp_table2 t
JOIN my_table1 q
ON q.importID = 1
SET t.Price = t.Price * q.percent
在運行UPDATE之前,首先將它作爲SELECT語句編寫通常是有益的。只需將UPDATE
關鍵字替換爲SELECT ... FROM
,並刪除SET
子句。例如:
SELECT t.Price AS `old_price`
, q.percent AS `percent`
, t.Price * q.percent AS `new_price`
FROM my_temp_table2 t
JOIN my_table1 q
ON q.importID = 1
變化,通過與UPDATE
關鍵字替換SELECT ... FROM
,並添加一個SET
子句回的UPDATE(用以指定一個返回NEW_PRICE表達式的結果,Price列。需要注意的是,如果沒有匹配行在my_table1
發現,查詢/更新將返回/更新行數爲零。
如果不使用JOIN操作,而改爲使用子查詢SET
子句中,一個NULL
值由subque返回ry將導致分配給Price
列的NULL
值。
我很感謝大家的幫助 – user3814045