如果在BulkInsert期间插入该记录,则更新记录的某些列

时间:2015-12-18 13:31:18

标签: sql sqlite sql-update android-contentprovider bulkinsert

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    |
 :------------------------------------:

可能是适合内容提供商的解决方案。

2 个答案:

答案 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)