Проверьте, есть ли строка с одинаковыми данными в двух столбцах в MySQL - PullRequest
0 голосов
/ 01 марта 2012

Я получил таблицу с 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 ]

2 голосов
/ 01 марта 2012

Добавьте уникальный ключ (тип, имя) и выполните INSERT s с предложением IGNORE, это поможет вам избежать исключений.

1 голос
/ 01 марта 2012

попробуйте

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
1 голос
/ 01 марта 2012

Если это необходимо в общем случае (не только для этой вставки), необходимо добавить ограничение 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'
        )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...