2011-01-13 66 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