だから、既に存在するレコードに基づいて新しいレコードを作成しようとしていますが、このレコードが存在しないことを確認するのに問題があります。データベースにはトランザクションの詳細が格納され、それが繰り返されるかどうかのフィールドがあります。SQLiteが存在しない場合は新しいレコードを作成します
私は当初、私はちょうどデバッグ目的SELECT
代わりINSERT
のを使用したい
SELECT datetime(transactions.date, '+'||repeattransactions.interval||' days')
AS 'newdate' FROM transactions, repeattransactions WHERE
transactions.repeat = repeattransactions.id
を使用して、新しい日付を生成しています。私はGROUP BY
またはCOUNT(*)
で何かをしようとしましたが、正確なロジックは私を逃しています。だから、例えば私は
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)
を試してみたが、これは明らかに、彼らが参加したかのように、それは私がグループ聞かせテーブルの下にレコードを追加していない2つのテーブルを扱います。
私は何日間も苦労しているので、どんな助けもありがとう!
EDIT: ドキュメントには、「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
「このレコードは既に存在しますか」を確認する基準は何ですか?この基準に基づいてユニークな制約を作成する必要があります。 – Arvo
ユニークな制約は、すべての列が非ユニークであることができるようにする必要がありますが、 'date'以外のすべての列が別のレコードと同じ場合、' date'列は、 'date'列を除くすべての列を持つレコードのサブセットで一意でなければなりません。日付。それが意味をなさなければ... – Josh
それは全く意味をなさない。上記の編集2を参照してください。 – Josh