DB上的表:
TABLE ALBUM - ID_ON_DISCOGS(唯一) - ARTIST_ID - LABEL_ID
我必须将记录批量插入此表。
问题在于,有时可能会发生批量插入尝试插入已存在的ID_ON_DISCOGS的记录。
在这种情况下,我想用新值更新ARTIST_ID或LABEL_ID字段。
示例:
ALBUM RECORD已经在DB中了:
|ID_ON_DISCOGS | ARTIST_ID | LABEL_ID|
:------------------------------------:
|123 | 345 | null |
:------------------------------------:
ALBUM RECORD我尝试插入:
|ID_ON_DISCOGS | ARTIST_ID | LABEL_ID|
:------------------------------------:
|123 | null | 567 |
:------------------------------------:
结果记录我想实现:
|ID_ON_DISCOGS | ARTIST_ID | LABEL_ID|
:------------------------------------:
|123 | 345 | 567 |
:------------------------------------:
可能是适合内容提供商的解决方案。
答案 0 :(得分:0)
就个人而言,我会首先执行批量插入。一旦完成,我会执行更新声明。也许尝试用CTE更新?请参阅mobsites答案,例如:SQL UPDATE row Number
答案 1 :(得分:-1)
这将更新所有具有匹配ID_ON_DISCOGS的记录。
REPLACE INTO ALBUM
(ID_ON_DISCOGS, ARTIST_ID, LABEL_ID)
SELECT src.ID_ON_DISCOGS, src.ARTIST_ID, src.LABEL_ID
FROM ImportTable src
INNER JOIN ALBUM dest
ON src.ID_ON_DISCOGS = dest.ID_ON_DISCOGS
然后,下一个查询将插入不在表中的剩余记录。
INSERT INTO ALBUM
SELECT imp.ID_ON_DISCOGS
,imp.ARTIST_ID
,imp.LABEL_ID
FROM ImportTable imp
WHERE imp.ID_ON_DISCOGS NOT IN (SELECT ID_ON_DISCOGS FROM ALBUM)