2017-01-01 2 views
0

내가 필요 행을 선택이 쿼리MySQL의 : 기준에 따라 테이블의 업데이트 열

SELECT *, min(id) 
FROM mytable 
WHERE col2='specval' 
GROUP BY col3 

있습니다.

I는 각각 위에서 선택한 행에 대한

UPDATE mytable 
set col4 = col3+1000 

을 설정하고 싶습니다.

그래서, 각각의 선택된 행에 대해서만 해당 테이블에서 col4 = col3 + 1000으로 설정하여 행을 업데이트하는 방법은 무엇입니까?

감사합니다.

+2

'select *, min (id)'는 각 그룹에서 최소 id를 가진 행을 선택하지 않습니다. 최소 ID를 선택하지만 그룹의 임의의 행에서 다른 열을 가져옵니다. 최소 열과 동일한 행은 아닙니다. 올바른 행을 얻는 방법은 http://stackoverflow.com/questions/7745609/sql-select-only-rows-with-max-value-on-a-column?rq=1을 참조하십시오. – Barmar

답변

1

은이 같은 쿼리를 사용할 수 있습니다

UPDATE mytable 
set col4 = col3+1000 
WHERE id in (
    SELECT * FROM (
    SELECT min(id) 
    FROM mytable 
    WHERE col2='specval' 
    GROUP BY col3 
) as myids 
); 
+2

mysql에서 작동하지 않습니다 – GurV

+1

@ Gurwinder Singh - 이제 vi 파생 테이블에서 작동합니다. –

0

업데이트 절에도 WHERE을 사용할 수 있습니다. 그래서 (나는 당신의 SELECT에서 추측하고있어) 당신에게 어떤 의미인지 "선택"에 따라, 당신은 같은 것을 할 수 있습니다

UPDATE mytable 
SET col4 = col3+1000 
WHERE col2 = 'specval'; 
+0

음 ... 'specval'은이 경우의 질문입니다 ... 동적입니다 ... – Haradzieniec

+0

그곳에서 원하는 것을 플러그인 할 수 있습니다. –

+0

@Haradzieniec'SELECT' 쿼리에서와 같은 방법으로 동적으로 제공 할 수 있습니다. – Barmar

1

당신 JOIN으로 UPDATE를 사용할 수 있습니다 :

UPDATE mytable t1 
     INNER JOIN 
    (SELECT 
     col3, MIN(id) id 
    FROM 
     mytable 
    GROUP BY col3) t2 ON t1.col3 = t2.col3 AND t1.id = t2.id 
SET 
    t1.col4 = t1.col3 + 1000; 
+0

나는이 솔루션을 선호합니다. 확실히 MySQL의 정신에 더 많은 것입니다. –