2013-09-25 26 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