简体   繁体   中英

sql server insert data from table1 to table2 where table1=table3 data

I am trying to insert into Table A, unique data from Table B that matches data in TAble C but I am keep getting the violation of primary key error and not sure what I am doing wrong Table A - bookfeed Table B - bookF Table C - bookStats

INSERT INTO bookFeed
 (entryId,feed,entryContent,pubDate,authorName,authorId,age,
  sex,locale,pic,fanPage, faceTitle,feedtype,searchterm,clientId,dateadded)
SELECT DISTINCT b.entryId,b.feed,b.entryContent,b.pubDate,b.authorName,
    b.authorId,b.age,b.sex,b.locale,b.pic,b.fanPage,b.faceTitle,b.feedtype,
    b.searchterm, b.clientId,b.dateadded 
  FROM bookF as b
  INNER JOIN bookStats as a on a.feed = b.feed 
       WHERE NOT EXISTS (SELECT * 
                           FROM bookFeed as c 
                          WHERE c.entryId = b.entryId)

Table A bookFeed has a primary key on entryId

It looks like in table bookF, there are duplicate records per entryId If you only want one entryId (limited by PK on bookFeed), you can use this. Adjust the order by in the ROW_NUMBER to suit

insert into bookFeed (
    entryId,feed,entryContent,pubDate,authorName,authorId,age,
    sex,locale,pic,fanPage,faceTitle,feedtype,searchterm,clientId,dateadded)
select
    entryId,feed,entryContent,pubDate,authorName,authorId,age,
    sex,locale,pic,fanPage,faceTitle,feedtype,searchterm, clientId,dateadded
from
(
    select rn=Row_number() over (partition by b.entryId order by b.entryId),
        b.entryId,b.feed,b.entryContent,b.pubDate,b.authorName,b.authorId,b.age,
        b.sex,b.locale,b.pic,b.fanPage,b.faceTitle,b.feedtype,b.searchterm, b.clientId,b.dateadded
    from bookF as b
    inner join bookStats as a on a.feed = b.feed
    left join bookFeed as c on c.entryId=b.entryId
    where c.entryId is null
) X
where rn=1

UPDATE : Try this for you query and see if it works,look at the data and see if there are duplicates meaning all the entries should have an entry id different than what is currently there -

SELECT b.entryId,b.feed,b.entryContent,b.pubDate,b.authorName,
    b.authorId,b.age,b.sex,b.locale,b.pic,b.fanPage,b.faceTitle,b.feedtype,
    b.searchterm, b.clientId,b.dateadded 
  FROM bookF as b
  INNER JOIN bookStats as a on a.feed = b.feed 
       WHERE b.entryId IN (SELECT distinct entryid 
                           FROM bookFeed)

I think you are trying to insert an entry id which is an primary key(check if the value trying to insert is not an duplicate,null or violates any other of primary key constraint)...so either dont try to insert it if it gets populated automatically or in case you are looking to insert it then turn on identity insert on..and try again...

But ideally your id should be calculated (auto increment or something) and never be inserted directly.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM