如果不存在,SQLite会创建一条新记录

时间:2011-09-15 09:44:09

标签: sql ios sqlite

嘿所以我正在尝试根据已经存在的记录创建新记录,但是我无法确保此记录不存在。数据库存储事务的详细信息,并具有是否重复的字段。

我正在使用

生成新日期
SELECT datetime(transactions.date, '+'||repeattransactions.interval||' days') 
AS 'newdate' FROM transactions, repeattransactions WHERE 
transactions.repeat = repeattransactions.id

最初我想使用SELECT代替INSERT仅用于调试目的。我试图用GROUP BYCOUNT(*)做一些事情,但确切的逻辑是在逃避我。所以例如我试过

SELECT * FROM transactions, (SELECT transactions.id, payee, category, amount, 
fromaccount, repeat, datetime(transactions.date, 
'+'||repeattransactions.interval||' days') AS 'date' FROM transactions,
repeattransactions WHERE transactions.repeat = repeattransactions.id)

但是这显然将两个表视为已加入,它不会将记录附加到表格底部,这样我就可以分组。

我已经挣扎了几天,所以任何帮助都会受到赞赏!

编辑: 文档说“ON CONFLICT子句适用于UNIQUE和NOT NULL约束”。根据定义,我不能对表有唯一的约束,因为我必须为新事务创建完全相同的记录而只有一个新的日期。或者我误解了这个?

EDIT2:

id        payee     repeat      date
1         jifoda    7           15/09/2011
2         jifoda    7           22/09/2011  <-- allowed as date different within subset
3         grefa     1           15/09/2011  <-- allowed as only date is not-unique
4         grefa     1           15/09/2011  <-- not allowed! exactly same as id 3

1 个答案:

答案 0 :(得分:0)

SQLite有重复的特殊DDL语句。像:

create table test(a TEXT UNIQUE ON CONFLICT IGNORE);
insert into test values (1);
insert into test values (1);
select count(*) from test;
1

它也可以是ON CONFLICT REPLACE。见文档。