вставить запись, если не существует в SQL, дубликат имени столбца - PullRequest
6 голосов
/ 27 июля 2010

Я хотел, чтобы решение вставляло запись, если ее там нет, поэтому я искал здесь и нашел решение, но у меня есть другая проблема

INSERT INTO closed_answers (question_id, subject_id)
SELECT * FROM (SELECT 2, 2) AS tmp
WHERE NOT EXISTS (
    SELECT question_id FROM closed_answers WHERE question_id = 2 AND subject_id = 2
) LIMIT 1

на выходе

#1060 - Duplicate column name '2'

если я использовал любые 2 числа, которые не идентичны, это будет работать, но проблема возникает, когда эти 2 цифры совпадают

Ответы [ 2 ]

15 голосов
/ 27 июля 2010

Наименьшее изменение для работы SQL - добавить псевдонимы в оператор select:

INSERT INTO closed_answers (question_id, subject_id)
SELECT * FROM (SELECT 2 AS question_id, 2 AS subject_id) AS tmp
WHERE NOT EXISTS (
    SELECT question_id
    FROM closed_answers
    WHERE question_id = 2 AND subject_id = 2
) LIMIT 1

Однако, если у вас есть уникальное ограничение на (question_id, subject_id), вы можете использовать INSERT IGNORE вместо:

INSERT IGNORE INTO closed_answers (question_id, subject_id)
VALUES (2, 2)
4 голосов
/ 27 июля 2010
INSERT INTO closed_answers (question_id, subject_id) 
SELECT * FROM (SELECT 2 a, 2 b) AS tmp 
WHERE NOT EXISTS ( 
    SELECT 1 FROM closed_answers WHERE question_id = 2 AND subject_id = 2 
) LIMIT 1 

Ваше утверждение select с подзапросом является странным ненужным, но проблема заключалась в том, что вы не назвали выбранные столбцы.При использовании существует, достаточно просто выбрать 1, а не поле.Кроме того, предел 1 не был необходим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...