2016-12-02 1 views
-1
IF NOT EXISTS (SELECT 1 FROM Products WHERE name='Iphone1' AND manufacturer='appl') THEN 
     INSERT INTO Products(product_id, name, category, manufacturer) 
     VALUES (10000, 'IphoneZ', null, 'appl'); 

ERROR: syntax error at or near "IF" LINE 1: IF NOT EXISTS (SELECT 1 FROM Products WHERE name='Iphone1' A...에 오류가 있습니다()

사람은 제가 뭘 잘못 이해하는 데 도움이 수 있습니까?

+1

단일 인용 부호 대신 이중 인용 부호가 사용됩니까? – jarlh

+1

http://dev.mysql.com/doc/refman/5.7/en/exists-and-not-exists-subqueries.html – 2oppin

+1

제목 및 'mysql'검색하기 : http://stackoverflow.com/questions/5528854/usage-of-mysqls-if-exists가 있습니다. [ask]를 읽으십시오. – philipxy

답변

0

MySQL은 프로그래밍 블록 (저장 프로 시저, 함수 및 트리거)에서 IF 만 지원합니다. 그러므로 당신은 당신이 원하는대로 할 수 없습니다.

대신, 당신은 단지 하나의 쿼리를 작성할 수 있습니다

INSERT INTO Products (product_id, name, category, manufacturer) 
    SELECT product_id, name, category, manufacturer 
    FROM (SELECT 10000 as product_id, 'IphoneZ' as name, null as category, 'appl' as manufacturer) t 
    WHERE NOT EXISTS (SELECT 1 FROM Products p WHERE p.name = t.name and p.manufacturer = t.manufacturer); 

사실,하지만, 데이터베이스를 직접 고유성 이런 종류의 시행해야하는 것이 가장 좋습니다.

CREATE UNIQUE INDEX unq_product_manufacturer_name ON product(manufacturer, name); 

가 그 다음을 수행하여 오류를 무시하는 쿼리를 작성할 수 있습니다 : 당신은 고유 제한 조건/인덱스 그렇게 할 수

INSERT INTO Products (product_id, name, category, manufacturer) 
    VALUES (10000, 'IphoneZ', null, 'appl') 
    ON DUPLICATE KEY UPDATE category = VALUES(category); 

ON DUPLICATE KEY을 아무것도하지 않습니다 - 단지에 제공 중복 값이 ​​삽입되면 오류를 반환하지 마십시오.

0

IF 문 끝에서 END IF 키워드가 누락되었습니다. 또한이 SQL 문은 스토어드 프로 시저 또는 스토어드 함수와 같은 루틴 블록에서만 사용될 수 있습니다.

귀하의 SQL은 다음과 같이해야합니다 : 그것은 MySQL의 또는 SQL 서버

IF NOT EXISTS (SELECT 1 FROM Products WHERE name='Iphone1' AND manufacturer = 'appl') THEN 
    INSERT INTO Products(product_id, name, category, manufacturer) 
    VALUES (10000, 'IphoneZ', null, 'appl'); 
END IF; 
0
  1. 인가?
  2. 잘못 입력했다고 생각합니다. name = 'Iphone1'. 'IphoneZ'여야합니다.
  3. 일부 장소에서는 작은 따옴표를 사용하고 일부 지역에서는 큰 따옴표를 사용했습니다.

그것은 MySQL은 다음 INSERT INTO 제품 (PRODUCT_ID, 이름, 카테고리, 제조업체) SELECT * FROM AS tmp_table WHERE NOT (10000, 'IphoneZ', 널 (null) 'APPL'를 선택) 쿼리 아래에 시도하는 경우 존재 (선택 1에서 Products_arun 이름 = 'IphoneZ' 및 제조업체 = 'appl') 제한 1;

이 NOT이있는 경우 SQL 서버는 다음 쿼리 아래 시도 인 경우 (제품에서 1을 SELECT WHERE 이름 = 'IphoneZ'AND = 'APPL'제조) VALUES 제품 (PRODUCT_ID, 이름, 카테고리, 제조업체) INTO INSERT (10000, 'IphoneZ', null, 'appl');

관련 문제