2010-07-27 4 views
5
나는 그것이 내가 여기에 검색하여 해결책을 찾을 수 있도록이없는 경우 레코드를 삽입하는 솔루션을 원하지만 난 또 다른 문제

삽입 기록하지 않을 경우 열 이름을 복제, SQL에 존재

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' 

나는 그것이 작동하지만,이 개 번호가 사용자의 SQL 작업을 할 수있는 같은

답변

13

작은 변화 할 때 문제가 발생 동일하지 않은 어떤이 개 번호를 사용하는 경우가 별칭을 추가하는 것입니다 당신의 sele CT 문 : 당신이 (question_id, subject_id)에 고유 제한 조건이있는 경우

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 

을하지만 당신은 대신 INSERT IGNORE를 사용할 수 있습니다

INSERT IGNORE INTO closed_answers (question_id, subject_id) 
VALUES (2, 2) 
+0

대단히 도움이되었습니다. http://stackoverflow.com/questions/3164505/mysql-insert-record-if-not-exists-in-table/3164741#comment33044636_3164741 –

3
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 

서브 쿼리와 귀하의 선택 문은 필요하지만, 문제가 이상하다 선택한 열의 이름을 지정하지 않았다는 것입니다. 필드를 사용하는 경우 필드가 아닌 1을 선택하는 것만으로 충분합니다. 또한 한계 1은 필요하지 않았습니다.

+0

SQL 구문에 오류가 있습니다. ; '올바르게 존재하지 않는 곳 ( SELECT 1 FROM closed_answers WHERE question_id = 2 AND subje'근처에있는 올바른 구문을 보려면 MySQL 서버 버전에 해당하는 설명서를 확인하십시오. –

+0

좋은 호출 표식. – Fosco

+0

@ MarkByers 필자의 경우에는 구문 오류가 발생하지만 Fosco의 대답에는 오류가 없습니다 .MariaDB를 사용하고 있습니다. –

관련 문제