2011-06-12 4 views
1

다음 표가 있는데 다음 쿼리로 ref 열 값을 늘리려고합니다.max가 작동하지 않는 내부 조인

orderid name age address ref 
1  A 22 a1  1 
2  B 21 b1  0 

update table1 
set ref = 
'(SELECT (MAX(ref) + 1) AS max_ref FROM table1)' 
where name= 'B' 

는하지만 항상 0 대신

2. 경우 감사로 설정합니다.

+2

정말 표현을 인용하고 있습니까? 나는 MySQL을 모른다. 그러나 이것은 정말로 이상하게 보일 뿐이다 (그리고 다른 DBMS에서는 수행되어서는 안된다) – erikkallen

답변

0

시도 :

UPDATE `table1` 
SET `ref` = (
     SELECT `cur_ref` FROM(
       SELECT MAX(`ref`)+1 `cur_ref` FROM `table1` 
     ) `calc_table` 
) WHERE `name` = 'B' 
1

MySQL doc에 따르면

현재, 테이블 을 업데이트하고 하위 쿼리에서 같은 테이블에서 선택할 수 없습니다. 그것은 쉽게 그러나

는 우회 : 당신은 SQL 문을 포함하는 문자열에 정수 열 ref을 설정하는 것처럼

UPDATE table1 
SET ref = (
    SELECT m.max_ref FROM (
     SELECT (max(ref) + 1) AS max_ref FROM table1) m) 
WHERE name= 'B' 
1

것 같습니다 :

set ref = '(SELECT (MAX(ref) + 1) AS max_ref FROM table1)' 

MySQL의 변환을 시도합니다 해당 문자열을 정수로 끝내면 0으로 끝납니다.

올바른 방법은 '' 따옴표를 생략하는 것입니다. es를 사용하면 새로운 문제가 생길 수 있습니다. MySQL은 동일한 테이블에서 업데이트하고 선택할 수 없도록합니다. 당신은 다른 해답에서 그 해결책을 찾을 수 있습니다.