2013-12-09 42 views
1

我試圖執行以下查詢:SQL查詢工作SQL Server上而不是在MySQL

UPDATE table1 SET column1 = NULL 
WHERE column1 = (SELECT column1 
        FROM table1 
        WHERE id = @id) 

MySQL服務器上,但我得到的follwing錯誤消息:

「錯誤代碼:1093。您無法在FROM子句中指定目標表'table1'進行更新「

這適用於Microsoft SQL Server。關於如何使它在MySQL上工作的任何想法?

感謝

+0

爲什麼不使用:'UPDATE table1 SET column1 = NULL WHERE id = @ id' ?? –

+0

不知道沒有看到前後的數據,但我認爲這可以簡化爲'UPDATE table1 SET column1 = NULL WHERE id = @ id'如果ID是一個唯一值。這將在MySQL和SQL服務器上工作 –

+0

我不能使用 UPDATE table1 SET column1 = NULL WHERE id = @ id' 因爲我需要將column1設置爲NULL無處不在,其中column1等於任何值column1等於row @ ID。因此,如果在id = @id的行中,colunm1等於5,那麼我必須設置colunm1 = NULL到處都是column1 = 5 – user1900799

回答

1

添加一個額外的SELECT到內層查詢。因爲你是從a而不是table1選擇這將作爲一個「與衆不同」的表:

UPDATE table1 
SET column1 = NULL 
WHERE column1 = (
    SELECT column1 FROM (
    SELECT column1 
    FROM table1 
    WHERE id = @id 
    )a); 

sqlfiddle demo

0

關閉我的頭頂,一對夫婦的事情,你可以嘗試:

1)嘗試給每個表1使用別名 2)使用'in'而不是'=',因爲您可以從選擇中獲得多個結果

UPDATE table1 t1 SET t1.column1 = NULL WHERE t1.column1 IN (SELECT t2.column1 FROM table1 t2 WHERE id = @id) 

3)失敗這些,可能使用臨時表?

+0

您的查詢將給出與原始查詢完全相同的錯誤。 –