2

私は 2 つのテーブルを持っています: タグとリンキング テーブル photos_tags。新しいタグを追加したいので、タグが既にタグ テーブルにあるかどうかを確認し、そうでない場合は挿入します。私のテーブルは次のようになります: tags(id, name), photos_tags(photos_id, tags_id)。今、私はこれをやろうとしました:

IF NOT EXISTS (SELECT * FROM tags WHERE name=*tagsName*)  
  INSERT INTO tags VALUES (NULL, *tagsName*); --NULL used for autonumbering

私も試しました:

INSERT INTO tags (  
  SELECT NULL, *tagsName*  
  WHERE NOT EXISTS (  
    SELECT * FROM tags  
    WHERE name=*tagsName*  
  )  
);

どちらのステートメントも構文エラーになります。

  • 近くの最初のステートメントでif
  • 近くの2番目のステートメントでselect

クエリはどのように表示されますか?

4

2 に答える 2

9

UNIQUE制約を作成してtags.nameこれを使用します。

INSERT  OR IGNORE
INTO    tags (id, name)
VALUES  (NULL, 'tagsName')

何らかの理由でこれを行うことができない、またはしたくない場合は、これを使用します。

INSERT
INTO    tags (id, name)
SELECT  NULL, 'tagsName'
WHERE   NOT EXISTS
        (
        SELECT  NULL
        FROM    tags
        WHERE   name = 'tagsName'
        )
于 2012-06-02T20:32:05.767 に答える
3
INSERT INTO tags (name)
SELECT 'tagsName'
WHERE NOT EXISTS (SELECT 1 FROM tags WHERE name = 'tagsName');

また

INSERT  OR IGNORE
INTO tags (id, name)
VALUES (NULL, 'tagsName')

一意の制約がある場合

于 2012-06-02T20:38:46.453 に答える