簡體   English   中英

嘗試插入DISTINCT值時違反主鍵約束

[英]Primary Key Constraint Violation when trying to insert DISTINCT values

insert into MemberGroup (MemberId, MemberGroupId, MemberJoinDate, MemberExpiryDate)
   SELECT DISTINCT 
       TransMemberId, 404, MAX(transaction_time), 
       dateadd(yy,1,MAX(transaction_time))
   FROM 
       DataTrans 
   INNER JOIN 
       DataTransItem ON DataTransId = DataTransItemId
   LEFT JOIN 
       MemberGroup ON MemberId = DataTransItemId
   INNER JOIN 
       MemberMembership ON MemberId = MembershipId
   INNER JOIN 
       LinkedMember ON MembershipId = LinkedMemberId
   WHERE 
       membership_clubid = 1 
       AND TransMemberId IN (select LinkedMemberId from LinkedMember)
       AND TransMemberId IN (select LinkedMemberId from LinkedMember 
                             where MemberGroupId NOT IN (1, 2, 3, 4, 5))
       AND TransMemberId IN (select MemberLinkedId from LinkedMember 
                             where DataTransItemId = 2414)
   GROUP BY 
      TransMemberId

為什么它返回以下錯誤,即使它在insert語句中使用了一個不同的TransMemberId ,並最終將TransMemberId分組以選擇一個。

違反PRIMARY KEY約束“ PK_MembershipGroup”。 無法在對象“ dbo.MemberGroup”中插入重復密鑰。 重復的鍵值為(FFASED487948KXWC1MH7,404)。

DataTransId
1.24322E+11
1.24322E+11
1.24322E+11
1.24322E+11
1.24322E+11
1.24322E+11
1.24322E+11
1.24322E+11
1.24322E+11
1.24322E+11
1.24322E+11
1.24322E+11
1.24322E+11
1.24322E+11
1.24322E+11
1.24322E+11

TransMemberId
F123TK1TSXX7
F123TK1TSXX7
F123TK1TSXX7
KS723423CLG8LSQ
KS723423CLG8LSQ
KS723423CLG8LSQ
KS723423CLG8LSQ
KS723423CLG8LSQ
48232423KXWC1MH7
48232423KXWC1MH8
48232423KXWC1MH9
F2P3XQTTRJ44232423
F2P3XQTTRJ44232424
F2P3XQTTRJ44232425
F2P3XQTTRJ44232426
F2P3XQTTRJ44232427

DataTransItemId
1.24322E+11
1.24322E+11
1.24322E+11
1.24322E+11
1.24322E+11
1.24322E+11
1.24322E+11
1.24322E+11
1.24322E+11
1.24322E+11
1.24322E+11
1.24322E+11
1.24322E+11
1.24322E+11
1.24322E+11
1.24322E+11

MembershipId
F123TK1TSXX7
F123TK1TSXX7
F123TK1TSXX7
KS723423CLG8LSQ
KS723423CLG8LSQ
KS723423CLG8LSQ
KS723423CLG8LSQ
KS723423CLG8LSQ
48232423KXWC1MH7
48232423KXWC1MH8
48232423KXWC1MH9
F2P3XQTTRJ44232423
F2P3XQTTRJ44232424
F2P3XQTTRJ44232425
F2P3XQTTRJ44232426
F2P3XQTTRJ44232427

LinkedMemberId
F123TK1TSXX7
F123TK1TSXX7
F123TK1TSXX7
KS723423CLG8LSQ
KS723423CLG8LSQ
KS723423CLG8LSQ
KS723423CLG8LSQ
KS723423CLG8LSQ
48232423KXWC1MH7
48232423KXWC1MH7
48232423KXWC1MH7
F2P3XQTTRJ44232423
F2P3XQTTRJ44232423
F2P3XQTTRJ44232423
F2P3XQTTRJ44232423
F2P3XQTTRJ44232423

MemberLinkedId
48KXWC1MH7ASGER
48KXWC1MH7ASGER
48KXWC1MH7ASGER
LKJDJX2RQ26Y7VD
LKJDJX2RQ26Y7VD
LKJDJX2RQ26Y7VD
LKJDJX2RQ26Y7VD
LKJDJX2RQ26Y7VD
F1TK1TSXX723FSDE
F1TK1TSXX723FSDE
F1TK1TSXX723FSDE
Z3VHVL846QQWER
Z3VHVL846QQWER
Z3VHVL846QQWER
Z3VHVL846QQWER
Z3VHVL846QQWER

我認為您的查詢可以是這樣的:

 insert into MemberGroup (MemberId, MemberGroupId, MemberJoinDate, MemberExpiryDate)
 (SELECT TransMemberId , 404, MAX(transaction_time), dateadd(yy,1,MAX(transaction_time))

 FROM DataTrans 
      INNER JOIN DataTransItem ON DataTransId = DataTransItemId
      LEFT JOIN MemberGroup ON MemberId = DataTransItemId
      INNER JOIN MemberMembership ON MemberId = MembershipId
      INNER JOIN LinkedMember ON MembershipId = LinkedMemberId

 WHERE membership_clubid = 1 
      AND TransMemberId IN (select LinkedMemberId from LinkedMember where MemberGroupId NOT IN (1, 2, 3, 4, 5))
      AND TransMemberId IN (select MemberLinkedId from LinkedMember where DataTransItemId = 2414)

 GROUP BY TransMemberId)

您可以檢查; 這個線索的結果:

WHERE TransMemberId IN (select LinkedMemberId from LinkedMember)
    AND TransMemberId IN (select LinkedMemberId from LinkedMember where MemberGroupId NOT IN (1, 2, 3, 4, 5))

與此線索相同:

WHERE TransMemberId IN (select LinkedMemberId from LinkedMember where MemberGroupId NOT IN (1, 2, 3, 4, 5))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM