1

3つの列を持つSQLテーブルがありますが、どれもUNIQUEではありません(ただし、ペア名+ロールはです):

 Name | Role | Votes

私がする必要があるのは、次のルールに従う sqllite クエリを作成することです。

  1. 指定された名前と役割を持つ行が既に存在する場合、投票は 1 ずつ増加します
  2. そうでない場合は、Votes = 1 で新しい行が作成されます。

INSERT OR REPLACEとこの素晴らしい投稿を調べましたが、それほど役に立たないようです。INSERT OR REPLACE が実行可能なオプションであるかどうかさえわかりません。

INSERT OR REPLACE INTO words (name,role,votes) 
VALUES ('foo','bar', coalesce((
    select votes from words where name = 'foo' and role='bar'),0)+1)

常に挿入し、交換しない

4

2 に答える 2

4

これを機能させるには、2つの列に一意のインデックスを作成する必要があります。

CREATE UNIQUE INDEX words_name_role_idx ON words (name,role)

単一の列に対して一意のインデックスを作成するのではなく、全体として2つの組み合わせに対して作成することに注意してください。

その後、REPLACE INTOステートメントが正しく機能し始めるはずです。

REPLACE INTO words (name,role,votes) VALUES ('foo','bar',
    coalesce((
        SELECT votes FROM words
        WHERE name = 'foo' AND role='bar'),0
    )+1
)

counter(上記に変更したことに注意してくださいvotes)。

于 2013-02-28T07:20:27.690 に答える
0

このクエリは、レコードを+1で更新します。

update todo set text='raj',complete='raj',pk=((SELECT pk FROM todo where text='raj' and complete='raj')+1) where (SELECT pk FROM todo where text='raj' and complete='raj') 

クエリを編集する

update words set name='foo',role='bar', votes =((SELECT votes FROM words where name='foo' and role='bar')+1) where (SELECT votes FROM words where name='foo' and role='bar') 

そして、この条件が真でない場合は、挿入クエリを実行します。

于 2013-02-27T16:45:11.197 に答える