2013-07-07 5 views
0

MySQL에서 .csv로 데이터를 내보내는 중입니다. 여기서 테이블의 특정 열을 기반으로 행 수를 포함해야합니다.동일한 테이블의 특정 값에 대해 열 값 COUNT를 업데이트하십시오.

나는 테이블은 id, e1e2

|id|e1|e2| 
| 1| A| | 
| 2| A| | 
| 3| A| | 
| 4| B| | 
| 5| C| | 
| 6| B| | 

열을 가진 e 내가 찾고있어 결과가 불렀다 :

|id|e1|e2| 
| 1| A| 3| 
| 2| A| 3| 
| 3| A| 3| 
| 4| B| 2| 
| 5| C| 1| 
| 6| B| 2| 

나는 이런 식으로 뭔가하려고하면 :

UPDATE `e` SET `e2` = (SELECT COUNT(`id`) FROM `e` WHERE `e1` = 'A') WHERE `e1` = 'A'; 

다음과 같이 표시됩니다. 당신은

가 어떻게 e2의 값이 e1의 값을 가진 행의 COUNT가되도록 내 데이터를 업데이트하는 방법에 대한 갈 수 FROM 절에 업데이트 'E'를 목표 테이블을 지정할 수 없습니다? 이게 내가 MySQL에서 할 수 없거나하지 말아야 할 것이지만 PHP에서해야 할 것인가?

(I 분명 뭔가 빠진 것 같은 내가 .... 기분이)

+0

몇 가지 아이디어 : http://stackoverflow.com/ q/16909732/395857 기본적으로 'e'를 업데이트 할 때 (쓰기 잠금) 읽기 액세스 권한을 가질 수 없으므로이를 피할 필요가 있습니다. 임시 테이블을 사용합니다. –

답변

2
UPDATE e a, (SELECT e1,COUNT(*) cnt 
       FROM e 
      GROUP BY e1) b 

    SET a.e2 = b.cnt 
WHERE a.e1 = b.e1; 
0
with 
AAA AS 
(
    select e1,count(*) as cnt from e group by e1 
) 

update e 
set e2 = AAA.cnt 
from e 
inner join AAA ON e.e1 = AAA.e1 
+0

MySQL이 WITH ...을 지원하지 않는 것 같습니까? – Jason

0

다음 쿼리를보십시오 :

update e 
set e2 = a.cnt 
from e inner join (select e1,count(*) as cnt from e as a group by e1) as a ON e.e1 = A.e1 
관련 문제