2

我有以下问题。我有一个表,其中包含idtrack_idartist_id等列title。唯一的唯一键是主键id,它是一个自增整数。track_id不是唯一的。

因此,出现了我需要更新title具有特定track_id. 如果不存在这样的记录,则应创建一个新记录。我不能使用 REPLACE INTO 或 INSERT...ON DUPLICATE KEY,因为这些操作使用唯一键或主键。我也不能使用多个查询,因为要进入的系统需要在单个查询中完成这些类型的操作。该查询可以根据需要尽可能复杂,但它们都必须位于一个查询中。

如何才能做到这一点?

4

2 回答 2

2

按以下顺序执行这两个查询:

update track set
title = ?
where track_id = ?;

insert into track (nonkey_col_1, nonkey_col_2, ...)
select 'nonkey_col_1_value',  'nonkey_col_2_value', ...
from track
where not exists (select * from track where track_id = ?)
limit 1;

其中只有一个会产生任何影响:第一个仅在有一行时执行。第二个仅在没有行的情况下执行。

于 2012-07-12T13:02:41.470 回答
1

你只是想做一个upsert。如果不存在则插入,如果存在则更新。android 无法做到这一点,因为它不支持多个查询。

我对这类事情的处理方法是:首先select track_id from ... where track_id=THE_ID。如果resultCursor.getCount()!=0则该行存在,因此您需要update,否则insert

至于时间,sqlite数据库中的单个标量是非常快的。

于 2012-07-12T12:58:02.740 回答