2017-10-10 49 views
1

我想寫一個查詢,根據它們的參數從某些行中選擇值,然後做一些計算並返回結果。我還需要更新所選的行。我只能想到通過單獨查詢來完成這兩項操作的方法,但是有沒有辦法一次完成這兩項操作?從表中選擇,更新選擇的行

查詢示例將是:

SELECT SUM(a.val1*b.val1) 
FROM a, b 
WHERE a.val2 = condition1 AND b.val2 = condition2; 

UPDATE a 
SET a.val3 = a.val1*b.val1 
FROM a INNER JOIN b ON a.val2 = condition1 AND b.val2 = condition2; 

有沒有辦法把它們結合起來?

+0

您的查詢語法不正確。所以,我想任何生成語法錯誤的查詢都會等同於它們。你真的在使用MySQL嗎? –

+0

@GordonLinoff是的。語法錯誤並不是那麼極端,這可能被解釋爲另一種語言。 – Roxerg

回答

1

不。SQL中沒有語法允許您檢索值並在同一個查詢中更新它們。使用SELECT來檢索值和更新來改變它們。

您可以將UPDATE語句中的SELECT用作calucalation的一部分,但結果不會是已更新內容的值,而只是已更新的行數。

你的SELECT語句中有一個小錯誤的,並應如下:

SELECT SUM(a.val1*b.val1) FROM a, b WHERE a.val2 = 1 and b.val2 = 1; 

這隻能返回一行:VAL1列的產品在其中VAL2列滿足表A和B的總和一定條件下。

目前尚不清楚你想通過更新表格a來達到目的。如果您希望在表a和表b中設置val3與val1的乘積(如果這些表中的val2符合某些條件),則以下操作可能會起作用,但您需要在兩個表中的列之間添加連接,否則,val3將會被設置爲表a中的val1和表b中的所有val1值的乘積,這可能不是你想要的。

UPDATE a 
SET a.val3 = 
(
SELECT a.val1*b.val1 
FROM b 
WHERE b.key = a.key 
AND b.val2 = condition2 
) 
WHERE a.val2 = condition1; 
+0

是的,那個修復程序實際上會做我想在示例中說明的內容。感謝您修復語法問題,回答我的主要問題! – Roxerg

1

不能:) 在SQL中它總是不同的查詢。你可以寫一個函數來做2個動作,但從來沒有一個查詢。

1

這將需要分兩步完成 - 選擇並彙總,然後更新。