2010-01-29 54 views
1

首先,我知道這是不可能的,因爲MySQL的5.1.x版的,它是這麼說的就在這裏:MySQL的更新和同一個表子查詢選擇

http://dev.mysql.com/doc/refman/5.1/en/update.html

就是我要問,雖然是如果有一種巧妙的方式可以使用臨時表/視圖執行查詢,而不必訴諸寫一個快速腳本來完成工作。我的查詢(這是完全錯誤的,不工作,只是一個供參考的人在家裏嘗試這個)看起來是這樣的:

UPDATE some_table 
set some_col = (SELECT some_othercol 
       from some_table 
       WHERE some_col > some_othercol 
       ); 

我想最終定some_colsome_othercol如果sol_col > some_othercol值。

不借助腳本來處理這個問題的最佳方法是什麼?

編輯 我的子查詢返回多行!

+1

你究竟想要做什麼?該查詢試圖將每行的some_col值設置爲一組值。從邏輯上講,你想要最終的結果是什麼? – Aaron

回答

0
+0

對不起,我應該添加一個重要的位,我不認爲上面的URL地址,我的子查詢返回多行 – randombits

+0

這是否有意義的概念呢?你怎麼能設置一個字段的值涉及多行?子查詢是特定於正在更新的行...如果您有多個更新行,則需要編寫查詢,以便爲每個我相信的子查詢執行。 –

2

我不確定這是不是你想要做的,但也許我可以告訴你一些東西讓你走上正確的道路。

UPDATE some_table ST 
SET some_col = (
    SELECT some_col 
    FROM some_table OT 
    WHERE OT.ID = ST.ID 
) 
WHERE ST.some_col > 2 

這將some_col設置爲自己的價值,但只有當some_col已經大於2,我知道這並不做任何事情,但它表明你在找什麼,可能是更接近於概念對於。如果您對最終會發生什麼給予更多的細節,我可以幫助您找到更接近您需要的解決方案。

+2

我認爲這也會在MySQL中引發錯誤,因爲子選擇使用與正在更新的表相同的表 –

3

我不明白爲什麼你需要一個子查詢。這不是你想要的嗎?:

UPDATE some_table 
SET some_col = some_othercol 
WHERE some_col > some_othercol