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
  • 在附近的第二个声明中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 回答