2013-07-07 65 views
0

我正在將數據從MySQL導出到.csv,我需要根據表中的特定列包含行計數。將列值更新爲同一表中特定值的COUNT行

我稱之爲表e與列ide1e2

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

我在尋找的結果是:

|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'; 

我得到: 您不能指定目標表「E」的更新在FROM子句

我如何去更新我的數據,以便在e2值與e1值的行數?這是我不能/不應該在MySQL中做,但應該在PHP中做?

(我覺得我失去了一些東西明顯的....)

+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 
相關問題