2012-03-01 5 views
0

ID, 유형, 이름이 3 개인 (기본) 테이블이 있습니다. 이 테이블에 데이터를 삽입하고 동일한 유형과 이름을 가진 여러 행을 방지해야합니다. 이것을 확인하고 하나의 쿼리에 삽입하려면 어떻게해야합니까?mysql에서 두 개의 열에 같은 데이터가있는 행이 있는지 확인하십시오.

나는

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

을 시도했지만 그것은 작동하지 않으며 그 이유 (MySQL의에서 조건 0 경험) 아무 생각이 -이 경우는 나에게 구문 오류

#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 

답변

1

을주고있다 일반적으로 (이 삽입물뿐만 아니라) (type, name) 조합에 UNIQUE 제약 조건을 추가해야합니다 :

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' 
     ) 
+0

여러 열에 고유 인덱스를 넣을 수 있습니다 몰랐하면, SELECT *'그러나'안 내 문제 –

2

고유 키 (유형, 이름)를 추가하고 IGNORE 절을 사용하여 INSERT을 실행하면 예외를 피하는 데 도움이됩니다.

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 
+0

를 해결 감사합니다 :.'들 SELECT *' –

+0

@ypercube 덕분에 .. 그것의 고침! – silly

관련 문제