2017-07-08 56 views
0

我想將這兩個查詢鏈接在一起,而不是在不同的時間執行它們。MySQL更新列值其中更新另一列值(單個查詢)

UPDATE `table` SET `column_one` = @value WHERE `column_one_key` = @key LIMIT 1; 

也是這個查詢;

UPDATE `table` SET `column_two` = @value WHERE `column_two_key` = @key LIMIT 1; 

像這樣的事情,但似乎無法得到它的工作

UPDATE `table` (SET `column_one` = @value WHERE `column_one_key` = @key) || (SET `column_two` = @value WHERE `column_two_key` = @key) LIMIT 1; 

一些額外的信息

column_one_key和column_two_key是絕不相同這就是爲什麼你可以使用OR。

+0

'限制'使得這非常困難。將其作爲兩個單獨的查詢。 –

+0

我會問你爲什麼使用'LIMIT'?你能否展示一些示例數據,以及這些命令執行後的樣子? –

+0

僅在更新值後停止查詢?因爲表格中沒有重複項目。它基本上是一個用於將另一個表格的兩個字段鏈接在一起的表格。但是,它有關於鏈接的每個項目的額外數據,這是我試圖設置的列。 – Jake

回答

2

如果您不需要limit(即每個鍵,一個匹配),你可以這樣做:

UPDATE `table` 
    SET column_one = (CASE WHEN @key = column_one_key THEN @value ELSE column_one END), 
     column_two = (CASE WHEN @key = column_two_key THEN @value ELSE column_two END) 
    WHERE @key IN (column_one_key, column_two_key); 

我覺得兩個更新是簡單。而且,如果您確實需要limit,那麼兩個更新絕對是一個更簡單的方法。

-1

嘗試這樣:

UPDATE `table` SET `column_one` = @value, `column_two` = @value WHERE `column_one_key` = @key AND `column_two_key` = @key LIMIT 1; 
+0

column_one_key和column_two_key永遠不會相同。所以這是行不通的。使用'或'也會使這不起作用,因爲會設置這兩個值。只應設置column_one,如果column_one_key相等,並且只設置column_two,如果column_two_key相等 – Jake