2013-09-25 24 views
1

我正在輸入以下查詢,但得到一個錯誤消息,表中不可更新?目標表不可更新?使用ORDER BY創建序列列

SET @rownumber = 0; 
UPDATE (
SELECT _atc_codes.se, diagnoses.* 
FROM diagnoses 
JOIN _atc_codes 
ON (_atc_codes.id = diagnoses.atc_code) 
ORDER BY _atc_codes.se, diagnoses.year, diagnoses.county, diagnoses.age_group, diagnoses.gender) AS b 
SET b.base_order_index = (@rownumber:[email protected]+1) 

我試圖做到的,是通過添加順序列,我可以代替上多列排序我的結果進行排序,以加快我的查詢。它基於一個ORDER BY子句,涉及5個列,一個來自JOINed表。

+0

您想更新一個臨時子查詢。這是行不通的。 –

+0

@juergend我嘗試使用'UPDATE'與'ORDER BY',但後來我得到錯誤**「不正確的使用更新與ORDER BY」**,所以我看到有人建議這個解決方案,但它顯然不工作。 – silkfire

+0

您是否試圖將序列列添加到臨時查詢或表中? YOu顯然是試圖在查詢上做到這一點 – AdrianBR

回答

0

如果您正在查找自動增量,請按照以下示例進行操作。如果你不在乎速度,只需更換你的子查詢表

SELECT mycols, @n := @n + 1 AS rownum 
    FROM MYTABLE , (SELECT @n := 0) as rownumstart 

你爲了得到:

第一步通過加入它添加一個ROWNUM加入上

第二步更新表與我們的同一表的子查詢以正確的順序,加入table.rownum與子查詢.new_rownum

ALTER MYTABLE ADD rownum int (11) unsigned NULL DEFAULT NULL; 

UPDATE MYTABLE , 

    (SELECT @n := 0) AS ALIAS 
SET [email protected] := @n + 1 ; 


UPDATE TABLE 
INNER JOIN 
    (SELECT ordered.*, @n := @n + 1 AS rownum 
    FROM 
    (SELECT WITH your 
     ORDER WITHOUT rid 
     FROM TABLE) AS ordered, 

    (SELECT @n := 0) AS ALIAS) ordered_with_rownum ON ordered_with_rownum.rownum=TABLE.rownum 
SET TABLE.columnA=ordered_with_rownum.columnA, 
      TABLE.columnB=ordered_with_rownum.columnB .... 
+0

我想要自動增量,但是作爲永久表列的一部分,而不是在SELECT語句中。 – silkfire

+0

嘗試:ALTER MYTABLE ADD rownum int(11)unsigned null default null; 更新表,(SELECT @n:= 0)設置的rownum = @ N:= @n + 1 – AdrianBR

+0

你已經錯過了,雖然最相關的事情,這是特定的順序,我是後。 – silkfire