1

既存のデータベースとテーブルでこの sqlite クエリを試しています。

INSERT INTO Actions (guide_id, user_id, action_type, action_date, article_id,  guide_name) VALUES (33, 1199180, 2, 1355829894, 2457, 'Amsterdam');

これは機能しますが、同じことを再度実行すると、不要な重複値が挿入されます。

テーブルは次のようになります。

テーブルの説明

ここでの問題は、 article_id が一意ではないことです。article_id が列に存在しない場合にのみ挿入を実行したい。

理論的には、次のようなものが必要です。

IF x DOES NOT EXISTS IN article_id DO (INSERT INTO Actions (guide_id, user_id, action_type, action_date, article_id,  guide_name) VALUES (33, 1199180, 2, 1355829894, 2457, 'Amsterdam'));

これは可能ですか?

4

4 に答える 4

2

試す:

INSERT INTO Actions (guide_id, user_id, action_type, action_date, article_id,  guide_name)
VALUES (33, 1199180, 2, 1355829894, 2457, 'Amsterdam') WHERE NOT article_id = x;

別の方法は、をキーarticle_idとして定義することです。UNIQUE

create unique index unique_name on Actions (article_id );

詳細については、sqlite のマニュアルを参照してください。

于 2012-12-18T11:45:32.167 に答える
1

たぶん、このようなものですか?

CREATE TRIGGER delete_duplicates_articles
AFTER INSERT ON Article
BEGIN
   DELETE FROM Article 
   WHERE action_date NOT IN (SELECT MIN(action_date) 
                             FROM Article 
                             WHERE article_id = new.article_id)
   AND article_id = new.article_id;
END;
于 2012-12-18T12:22:25.777 に答える
0

article_id を一意にする場合は、action_id ではなく article_id を主キーにする必要があります。

于 2012-12-18T11:46:49.277 に答える
-1

UNIQUE制約を追加できないのはなぜですか?

ALTER TABLE Actions
ADD UNIQUE (article_id);
于 2012-12-18T12:24:27.133 に答える