2011-01-13 70 views
0

我试图插入到表A,从表B唯一的数据表C相匹配的数据,但我不断收到违反主键的错误和不知道的我在做什么错 表A - bookfeed 表B - bookF 表C - bookStatsSQL服务器插入数据参见表2,其中表1 =表3数据

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) 

表A bookFeed对ENTRYID

主键

回答

2

它看起来像在表bookF中,每个条目有重复记录IdId 如果你只想要一个entryId(由bookFeed上的PK限制),你可以使用它。在ROW_NUMBER中调整顺序以适合

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 
1

UPDATE:试试这个为您查询,看看是否它的工作原理,看看数据,看看是否有重复的意思,所有的条目应该有一个e n请ID比目前有不同 -

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) 

我认为你要插入一个条目id,这将是一个主键(检查是否试图插入的值不是重复,无效或违反任何其他的主键约束)......所以要么不要尝试插入它,如果它被自动填充或者如果你正在寻找插入然后打开标识插入on..and再试一次......

但最好你的身份证应该进行计算(自动增量或其他)并且不要直接插入。

+0

对不起,这应该是显而易见的。我认为这是它,但只是想要它跳过任何重复并插入所有其他数据。这就是为什么我尝试使用不同的,但我想有相同的entryIds,但与其他领域不同。感谢 – vbNewbie 2011-01-13 21:46:38

+0

这个答案似乎并不地址表保存ID,这是一个问题,似乎有什么要问之间导入/转让的问题。你的观点是关于身份专栏和新的数据在旧的践踏,这两者似乎都不是问题。 – RichardTheKiwi 2011-01-13 21:49:37