检查mysql中的两列中是否有相同数据的行

时间:2012-03-01 07:35:26

标签: mysql sql

我得到了3列(主要)id,类型,名称的表。我在这个表中插入数据,我需要防止多个行具有相同的类型和名称。如何检查并插入一个查询?

我在尝试

IF ((select id from models where type = 1 and name = 'test') is null)
THEN insert into models(type, name) values(1, 'test');
END IF;

但它不起作用,我不知道为什么(0体验mysql中的条件) - 它给我语法错误

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IF ((select id from models where type = 1 and name = 'test') is null)
THEN inse' at line 1 

3 个答案:

答案 0 :(得分:2)

添加唯一键(类型,名称),并使用IGNORE子句执行INSERT,它将帮助您避免出现。

答案 1 :(得分:1)

如果通常需要这样做(不仅适用于此插入内容),则应在UNIQUE组合上添加(type, name)约束:

ALTER TABLE models
  ADD UNIQUE KEY type_name_U (type, name) ;

然后您可以简单地添加行,如果表中存在组合,则插入将失败:

INSERT INTO  models(type, name)
  VALUES (1, 'test') ;

仅限一次性支票,请尝试以下方式:

INSERT INTO  models(type, name)
  SELECT 1, 'test'
  FROM dual
  WHERE NOT EXISTS
        ( SELECT *
          FROM models
          WHERE type = 1 
            AND name = 'test'
        )

答案 2 :(得分:1)

试试这个

INSERT INTO models
SELECT
    s.*
FROM (
    SELECT
        1 AS type,
        'test' AS name
) AS s
LEFT OUTER JOIN models x
    ON x.type = s.type
    AND x.name = s.name
WHERE x.type IS NULL