问题如标题所示,希望大家给个sql语句,其中主要是把A表中的link与title字段里的数据导入到B表中link字段与title字段中,不过当A表的数据有更新(是指数据增加),也能导入到B表中,但是之前导入到B表的数据不能再导入?在此静候佳音了!
 其中的qq_url表: 
create table A( 
id int primary key auto_increment, 
link varchar(255) not null, 
title varchar(255) not null, 
qq_top int default 0 
)ENGINE=InnoDB DEFAULT CHARSET=gbk; 
而article表: 
create table B( 
id int primary key auto_increment, 
link varchar(255) not null, 
title varchar(255) not null, 
qq_top int default 0 
)ENGINE=InnoDB DEFAULT CHARSET=gbk; 

解决方案 »

  1.   

    insert into b
    select * from a 
    on duplicate key update b.link=a.link,b.title=a.title
      

  2.   


    建议在A表上建个触发器,当有数据插入的时候进行判断,把新插入A表而B表不存在的记录插入B表INSERT INTO B(link,title)
    SELECT link,title FROM A WHERE NOT EXISTS(SELECT * FROM B where link=A.link and title=A.link)
      

  3.   

    老兄,你这个sql貌似只能执行一次的吧,执行两次就出错了,我想问问能不能是不出错,只显示不执行操作的
      

  4.   


    INSERT INTO B(link,title)
    SELECT link,title FROM A WHERE NOT EXISTS(SELECT * FROM B where link=A.link and title=A.title)写错了一个地方,这样应该没有问题的,我测试过
      

  5.   

    不是的,你这个语句,我在网上也有查过,一开始我以为是,后来发现不是,当你重复输入你那条sql语句是不能重复输入,但是当你在A表插入一条语句之后再去执行你的那条语句,你会发现你的那条语句是不会再添加到B表的,我指的是最新插入到A表的那条语句
      

  6.   


    应该不会出错,如果记录存在则进行update, 你的出错信息是什么?
      

  7.   


    insert into article(article_title,article_link)
    select title,link from qq_url 
    on duplicate key update article.article_link=qq_url.link,article.article_title=qq_url.title;
    现在不知道每次都可以输入了,不过问题还是一样,每执行一次就把前一张表中所有数据都录入?我想要的效果是第一次是全录入,后面的录入则是在前一张表中有数据增加时才录入,当然录入的是前一张数据多出来的数据
      

  8.   


    你的意思是插入A表的数据即使有重复,在插入后也要插入B表?这样的话我就理解错了
    用触发器吧CREATE TRIGGER tri_AtoB
    AFTER INSERT 
    ON A  
    FOR EACH ROW   
    BEGIN   
      INSERT INTO B(link,title) SELECT link,title FROM NEW;  
    END; 
    不过如果A表重复数据,只是插入这两个字段到B没有任何意义,除非还有其他的字段,如ID或时间等不重复的信息
      

  9.   

    A表里的数据不会重复的,因为我是在做一个Rss订阅,其实是几个表导入B表,有六个表导入B表,关键是这六个表每天的数据都在更新,当然这里的更新是数据在增加,而你之前给的那个sql语句则是每次把A表里所有的数据都加到B表,而我想要的是每次只加A表更新的数据,还有就是那个触发器是不是像sql语句那样用的?
      

  10.   

    触发器就像建表那样在命令行里建立一下,在程序里是不用用的是吧,那样的话,你的那个触发器也是每次把A表里所有数据都加到B表的,就好如一开始A表有30条数据,执行导入B表,得到B表也有30条数据,然后我给A表加入五条数据,则B表也相应只增加A表后来增加的五条达到35条,而不是65条这样的数据