[英]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
Why is this returning the following error even though it uses a distinct within the insert statement as well as groups the TransMemberId
in the end to select one. 为什么它返回以下错误,即使它在insert语句中使用了一个不同的TransMemberId
,并最终将TransMemberId
分组以选择一个。
Violation of PRIMARY KEY constraint 'PK_MembershipGroup'. 违反PRIMARY KEY约束“ PK_MembershipGroup”。 Cannot insert duplicate key in object 'dbo.MemberGroup'. 无法在对象“ dbo.MemberGroup”中插入重复密钥。 The duplicate key value is (FFASED487948KXWC1MH7, 404). 重复的键值为(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
I think your query can be like this: 我认为您的查询可以是这样的:
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)
As you can check; 您可以检查; the result of this clue: 这个线索的结果:
WHERE TransMemberId IN (select LinkedMemberId from LinkedMember)
AND TransMemberId IN (select LinkedMemberId from LinkedMember where MemberGroupId NOT IN (1, 2, 3, 4, 5))
is as same as this clue: 与此线索相同:
WHERE TransMemberId IN (select LinkedMemberId from LinkedMember where MemberGroupId NOT IN (1, 2, 3, 4, 5))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.