update tb1 A,tb2 B set A.xxx=B.xxx where A.id=B.id
贴建表及插入记录的SQL,及要求结果出来看看 try: update t1 a inner join t2 b on a.title=b.title and a.pdfurl=b.pdfurl and a.pageurl=b.pageurl inner join t1 c on a.id>c.id and a.title=c.title and a.pdfurl=c.pdfurl and a.pageurl=c.pageurl set a.checked=0
数据库名称和版本MySQL5.1create table tb1 ( id varchar(10), title varchar(20), checked varchar(10) ... ) INSERT INTO tb1 VALUES (1;aa1,1...) INSERT INTO tb1 VALUES (2,aa2,1...) INSERT INTO tb1 VALUES (3,aa1,1...) INSERT INTO tb1 VALUES (4,aa2,1...) INSERT INTO tb1 VALUES (5,aa1,1...) create table tb2 ( id varchar(10), pdfurl varchar(20), pageurl varchar(20), ... ) INSERT INTO tb2 VALUES (1,bb1,cc1,...) INSERT INTO tb2 VALUES (2,bb1,cc1,...) INSERT INTO tb2 VALUES (3,bb1,cc1,...) INSERT INTO tb2 VALUES (4,bb1,cc2,...) INSERT INTO tb2 VALUES (5,bb1,cc1,...)根据第一个表table1中的字段title,第二个表table2中的字段pdfurl和pageurl,当记录之间这三个字段的值都相同时,把table1中id较大的字段checked的值置零 得到这样的结果: tb1 id title checked ... 1 aa1 1 ... 2 aa2 1 ... 3 aa1 1 ... 4 aa2 1 ... 5 aa1 0 ...
CREATE TABLE tb1 ( id VARCHAR(10), title VARCHAR(20), checked VARCHAR(10) ); INSERT INTO tb1 VALUES (1,'aa1',1); INSERT INTO tb1 VALUES (2,'aa2',1); INSERT INTO tb1 VALUES (3,'aa1',1); INSERT INTO tb1 VALUES (4,'aa2',1); INSERT INTO tb1 VALUES (5,'aa1',1);没有理解到你的意思,为什么CREATE TABLE tb2 ( id VARCHAR(10), pdfurl VARCHAR(20), pageurl VARCHAR(20) ); INSERT INTO tb2 VALUES (1,'bb1','cc1'); INSERT INTO tb2 VALUES (2,'bb1','cc1'); INSERT INTO tb2 VALUES (3,'bb1','cc1'); INSERT INTO tb2 VALUES (4,'bb1','cc2'); INSERT INTO tb2 VALUES (5,'bb1','cc1');没有理解到你的意思,为什么 4 aa2 1 ->4 aa2 0?
CREATE TABLE tb1 ( id VARCHAR(10), title VARCHAR(20), checked VARCHAR(10) ); INSERT INTO tb1 VALUES (1,'aa1',1); INSERT INTO tb1 VALUES (2,'aa2',1); INSERT INTO tb1 VALUES (3,'aa1',1); INSERT INTO tb1 VALUES (4,'aa2',1); INSERT INTO tb1 VALUES (5,'aa1',1);CREATE TABLE tb2 ( id VARCHAR(10), pdfurl VARCHAR(20), pageurl VARCHAR(20) ); INSERT INTO tb2 VALUES (1,'bb1','cc1'); INSERT INTO tb2 VALUES (2,'bb1','cc1'); INSERT INTO tb2 VALUES (3,'bb1','cc1'); INSERT INTO tb2 VALUES (4,'bb1','cc2'); INSERT INTO tb2 VALUES (5,'bb1','cc1');没有理解到你的意思,为什么 4 aa2 1 ->aa2的checked不为 0?
UPDATE tb1 a INNER JOIN ( SELECT MAX(a.id) AS ma,a.`title`,b.`pageurl`,b.`pdfurl` FROM tb1 a INNER JOIN tb2 b ON a.id=b.`id` GROUP BY a.`title`,b.`pageurl`,b.`pdfurl` HAVING COUNT(*)>1) c ON a.id=c.ma SET a.`checked`=0;
建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
参考一下这个贴子的提问方式http://topic.csdn.net/u/20091130/20/8343ee6a-417c-4c2d-9415-fa46604a00cf.html
1. 你的 create table xxx .. 语句
2. 你的 insert into xxx ... 语句
3. 结果是什么样,(并给以简单的算法描述)
4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)
这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。
set A.xxx=B.xxx
where A.id=B.id
try:
update t1 a inner join t2 b on a.title=b.title and a.pdfurl=b.pdfurl and a.pageurl=b.pageurl
inner join t1 c on a.id>c.id and a.title=c.title and a.pdfurl=c.pdfurl and a.pageurl=c.pageurl
set a.checked=0
(
id varchar(10),
title varchar(20),
checked varchar(10)
...
)
INSERT INTO tb1 VALUES (1;aa1,1...)
INSERT INTO tb1 VALUES (2,aa2,1...)
INSERT INTO tb1 VALUES (3,aa1,1...)
INSERT INTO tb1 VALUES (4,aa2,1...)
INSERT INTO tb1 VALUES (5,aa1,1...)
create table tb2
(
id varchar(10),
pdfurl varchar(20),
pageurl varchar(20),
...
)
INSERT INTO tb2 VALUES (1,bb1,cc1,...)
INSERT INTO tb2 VALUES (2,bb1,cc1,...)
INSERT INTO tb2 VALUES (3,bb1,cc1,...)
INSERT INTO tb2 VALUES (4,bb1,cc2,...)
INSERT INTO tb2 VALUES (5,bb1,cc1,...)根据第一个表table1中的字段title,第二个表table2中的字段pdfurl和pageurl,当记录之间这三个字段的值都相同时,把table1中id较大的字段checked的值置零
得到这样的结果:
tb1
id title checked ...
1 aa1 1 ...
2 aa2 1 ...
3 aa1 1 ...
4 aa2 1 ...
5 aa1 0 ...
(
id VARCHAR(10),
title VARCHAR(20),
checked VARCHAR(10)
);
INSERT INTO tb1 VALUES (1,'aa1',1);
INSERT INTO tb1 VALUES (2,'aa2',1);
INSERT INTO tb1 VALUES (3,'aa1',1);
INSERT INTO tb1 VALUES (4,'aa2',1);
INSERT INTO tb1 VALUES (5,'aa1',1);没有理解到你的意思,为什么CREATE TABLE tb2
(
id VARCHAR(10),
pdfurl VARCHAR(20),
pageurl VARCHAR(20)
);
INSERT INTO tb2 VALUES (1,'bb1','cc1');
INSERT INTO tb2 VALUES (2,'bb1','cc1');
INSERT INTO tb2 VALUES (3,'bb1','cc1');
INSERT INTO tb2 VALUES (4,'bb1','cc2');
INSERT INTO tb2 VALUES (5,'bb1','cc1');没有理解到你的意思,为什么
4 aa2 1 ->4 aa2 0?
(
id VARCHAR(10),
title VARCHAR(20),
checked VARCHAR(10)
);
INSERT INTO tb1 VALUES (1,'aa1',1);
INSERT INTO tb1 VALUES (2,'aa2',1);
INSERT INTO tb1 VALUES (3,'aa1',1);
INSERT INTO tb1 VALUES (4,'aa2',1);
INSERT INTO tb1 VALUES (5,'aa1',1);CREATE TABLE tb2
(
id VARCHAR(10),
pdfurl VARCHAR(20),
pageurl VARCHAR(20)
);
INSERT INTO tb2 VALUES (1,'bb1','cc1');
INSERT INTO tb2 VALUES (2,'bb1','cc1');
INSERT INTO tb2 VALUES (3,'bb1','cc1');
INSERT INTO tb2 VALUES (4,'bb1','cc2');
INSERT INTO tb2 VALUES (5,'bb1','cc1');没有理解到你的意思,为什么
4 aa2 1 ->aa2的checked不为 0?
可能还是不叫绕口呀
根据第一个表table1中的字段title,第二个表table2中的字段pdfurl和pageurl,当记录之间这三个字段的值都相同时你给出的数据这3个字段不相同
5 aa1 0中的checked为0
SELECT MAX(a.id) AS ma,a.`title`,b.`pageurl`,b.`pdfurl` FROM tb1 a INNER JOIN tb2 b
ON a.id=b.`id` GROUP BY a.`title`,b.`pageurl`,b.`pdfurl` HAVING COUNT(*)>1) c
ON a.id=c.ma
SET a.`checked`=0;