现有50多万的记录,每一条记录的内容分布于两个表中,现在要根据第一个表table1中的字段title,第二个表table2中的字段pdfurl和pageurl,当记录之间这三个字段的值都相同时,把table1中id较大的字段checked的值置零。(一条记录在两个表中有相同的id号)
解决方案 »
- 请教一个问题
- 装了个php环境套件phpnow,就把mysql一起装上了,可是我不知如何用呀?
- 终于写完了FlexQue共享版,欢迎下载使用,顺便散散分。(程序带有一个MySQL,Oracle,MSSQL的查询工具)
- mysql5,同一个连接中,怎样取得上一次自增字段产生的值?
- mysql指定线程的内存释放
- 怎么样把MYSQL加载到管理工具中的服务项呀
- 奇怪,定义了两个字段t1(char 20) t2(varchar 255),建表后t1自动变成了varchar类型,这是为什么?能解决吗?
- 两个对应的表添加数据问题
- 关于模糊查询的问题
- 求同一数据库,不同表中的2个字段同步方法
- MYSQL 两表关联的区别
- 求MYSQL 截取字符串语句
建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
参考一下这个贴子的提问方式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;