现有50多万的记录,每一条记录的内容分布于两个表中,现在要根据第一个表table1中的字段title,第二个表table2中的字段pdfurl和pageurl,当记录之间这三个字段的值都相同时,把table1中id较大的字段checked的值置零。(一条记录在两个表中有相同的id号)

解决方案 »

  1.   

    Please take out your create table command,and take out the test data.
      

  2.   

     (不要高估你的汉语表达能力或者我的汉语理解能力)
       建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
       参考一下这个贴子的提问方式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)
       
       这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。   
      

  3.   

    update tb1 A,tb2 B
    set A.xxx=B.xxx
    where A.id=B.id
      

  4.   

    贴建表及插入记录的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
      

  5.   

    数据库名称和版本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      ...
      

  6.   

    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?
      

  7.   

    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?
      

  8.   

    因为id=4时 与id=2的checked不相同
      

  9.   

    当记录之间这三个字段的值都相同时,把table1中id较大的字段checked的值置零
    可能还是不叫绕口呀
      

  10.   

    没有理解
    根据第一个表table1中的字段title,第二个表table2中的字段pdfurl和pageurl,当记录之间这三个字段的值都相同时你给出的数据这3个字段不相同
      

  11.   

    简要说明为什么
    5 aa1 0中的checked为0
      

  12.   

    不知道你看到了没,id=1,3,5时 3条记录的title,pdfurl,pageurl都是相等的
      

  13.   

    就是根据3个字段值当判断重复记录,重复时id较大的记录的checked的值变为o
      

  14.   

    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;