Mysql 如何使用GROUPBY子句更新具有特定计数的多行?

Mysql 如何使用GROUPBY子句更新具有特定计数的多行?,mysql,count,group-by,duplicates,Mysql,Count,Group By,Duplicates,我想用数字40更新具有特定计数*=2的多行。考虑下面的例子: 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

我想用数字40更新具有特定计数*=2的多行。考虑下面的例子:

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);
我使用了以下查询更新测试集tst=40,其中按天从测试组中选择天,计数*=2

但它从来都不起作用。需要帮忙吗

谢谢


Aymen

下面是一个使用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

下面是一个使用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

感谢上帝。。。最后,我们提出了工作查询:

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)

感谢上帝。。。最后,我们提出了工作查询:

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)

谢谢dcp,它对我不起作用!我使用的是Mysql 5.1.33。更新语句以COUNT*=2结尾;我认为select*from test的第二句话只是为了显示结果。不是吗?不管怎样,我用了上面的句子,用了SELECT子句分隔,但从来都不起作用。在分离情况下,我收到一条消息,您不能在FROM子句中为更新指定目标表“test1”。我使用了test1表而不是test。我提出了这个查询,但它也不起作用!但我认为这更接近正确的答案。不是吗?!更新test1 SET tst=40(如果存在),将test1 t2中的SELECT day从SELECT day选择为tmpb,其中test1.day=t2.day按天分组,计数*=2;这里的错误是where子句中的未知列“t2.day”,谢谢dcp,它对我不起作用!我使用的是Mysql 5.1.33。更新语句以COUNT*=2结尾;我认为select*from test的第二句话只是为了显示结果。不是吗?不管怎样,我用了上面的句子,用了SELECT子句分隔,但从来都不起作用。在分离情况下,我收到一条消息,您不能在FROM子句中为更新指定目标表“test1”。我使用了test1表而不是test。我提出了这个查询,但它也不起作用!但我认为这更接近正确的答案。不是吗?!更新test1 SET tst=40(如果存在),将test1 t2中的SELECT day从SELECT day选择为tmpb,其中test1.day=t2.day按天分组,计数*=2;此处的错误是“where子句”中的未知列“t2.day”