2012-03-06 27 views
1

我想更新具有特定計數次數(COUNT(*)= 2),與數40請看下面的例子多行:如何使用Group by子句更新具有特定計數的多個行?

create table test(id int not null primary key, day date not null, tst int not null ); 
insert into test(id, day, tst) values(1, '2006-10-08', 0); 

insert into test(id, day, tst) values(2, '2006-10-08', 0); 

insert into test(id, day,tst) values(3, '2006-10-09', 0); 

我用下面的查詢UPDATE test SET tst = 40 WHERE (select day from test GROUP BY day having count(*)=2);

但從不工作。任何幫助請...

謝謝。

Aymen

回答

0

感謝上帝......最後,我們提出了工作查詢:

UPDATE test1 SET tst = 40 WHERE EXISTS (SELECT day FROM (SELECT day from test1) 
AS tmpb WHERE test1.day = tmpb.day GROUP BY day HAVING COUNT(*) = 2) 
1

這裏有一個完整的示例(使用了Oracle而不是MySQL的,但語法應該是相似的,如果不相同):

CREATE TABLE TEST (tst int, DAY INT) 

INSERT INTO TEST VALUES (2, 4); 
INSERT INTO TEST VALUES (3, 4); 
INSERT INTO TEST VALUES (4, 5); 

UPDATE TEST 
    SET tst = 40 
WHERE EXISTS (SELECT DAY FROM TEST t2 WHERE t2.day = test.day GROUP BY DAY HAVING COUNT(*) = 2) 
SELECT * FROM TEST; 


Result: 
    TST DAY 
1 40 4 
2 40 4 
3 4 5 
+0

謝謝dcp,它不適合我!我正在使用Mysql 5.1.33。 UPDATE語句以「HAVING COUNT(*)= 2」結尾;「我認爲「select * from test」的第二句只是爲了顯示結果。不是嗎?任何方式,我已經使用上面的句子,並與SELECT子句分離,但從來沒有工作。在分離情況下,我收到了這條消息:「你無法在FROM子句中指定目標表'test1'進行更新」。 – Aymen 2012-03-07 02:55:07

+0

我用test1表代替測試。 – Aymen 2012-03-07 03:37:44

+0

我想出了這個查詢,這也是行不通的!但我認爲它更接近正確的一個。不是嗎?! (SELECT * day(FROM test1 t2 from SELECT date)AS tmpb WHERE test1.day = t2.day GROUP BY day HAVING COUNT(*)= 2);這裏的錯誤是'where子句'中的未知列't2.day'「 – Aymen 2012-03-07 07:49:59