簡體   English   中英

SQLite創建一個新記錄(如果不存在)

[英]SQLite create a new record if it doesn't exist

嘿,所以我試圖根據一個已經存在的記錄創建一個新記錄,但是我很難確保該記錄不存在。 該數據庫存儲交易的詳細信息,並具有一個是否重復的字段。

我正在使用生成新日期

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約束”。 根據定義,我無法在表上具有唯一約束,因為我必須為具有新日期的新交易創建完全相同的記錄。 還是我誤解了?

編輯2:

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

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 參見文檔。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM