programing

SQL - IF EXPEDUTE ELSER 구문 오류

megabox 2023. 10. 16. 21:41
반응형

SQL - IF EXPEDUTE ELSER 구문 오류

다음과 같은 SQL 쿼리가 있습니다.

IF EXISTS(SELECT * FROM component_psar WHERE tbl_id = '2' AND row_nr = '1') 
   UPDATE component_psar
      SET col_1 = '1', col_2 = '1', col_3 = '1', col_4 = '1', col_5 = '1',
                 col_6 = '1', unit = '1', add_info = '1', fsar_lock = '1' 
    WHERE tbl_id = '2' AND row_nr = '1' 
ELSE 
    INSERT INTO component_psar (tbl_id, row_nr, col_1, col_2, col_3, col_4,
                                col_5, col_6, unit, add_info, fsar_lock)
    VALUES ('2', '1', '1', '1', '1', '1', '1', '1', '1', '1', 'N')

내가 모든 열을 '1'로 설정하려고 한다는 사실은 무시하세요.단지 예시적인 자료일 뿐입니다.:)

어쨌든 이 쿼리를 실행하면 구문 오류가 반환됩니다.

#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 EXISTS(SELECT * FROM
     component_psar WHERE tbl_id = '2' AND row_nr = '1') UP' at line 1

나는 그것을 응시하고 30분 동안 인터넷을 검색해 보았지만 이 추정되는 구문 오류를 찾을 수 없습니다.아마 제가 놓치고 있는 바보 같은 짓을 하게 될 겁니다. 하지만 이 일에 대해서는 여러분의 도움이 필요합니다.

INSERT INTO component_psar (tbl_id, row_nr, col_1, col_2, col_3, col_4, col_5, col_6, unit, add_info, fsar_lock)
VALUES('2', '1', '1', '1', '1', '1', '1', '1', '1', '1', 'N')
ON DUPLICATE KEY UPDATE col_1 = VALUES(col_1), col_2 = VALUES(col_2), col_3 = VALUES(col_3), col_4 = VALUES(col_4), col_5 = VALUES(col_5), col_6 = VALUES(col_6), unit = VALUES(unit), add_info = VALUES(add_info), fsar_lock = VALUES(fsar_lock)

함께 작업합니다.tbl_id그리고.row_nr하고 있다UNIQUE열쇠.

이것은 DocJonas가 예를 들어 링크한 방법입니다.

다음은 설명서 INSERT...에 대한 링크입니다. "중복문"입니다.

추가해야 합니다.THEN

IF EXISTS(SELECT * FROM component_psar WHERE tbl_id = '2' AND row_nr = '1') 
THEN
UPDATE component_psar SET col_1 = '1', col_2 = '1', col_3 = '1', col_4 = '1', col_5 = '1', col_6 = '1', unit = '1', add_info = '1', fsar_lock = '1' WHERE tbl_id = '2' AND row_nr = '1' 
ELSE 
INSERT INTO component_psar (tbl_id, row_nr, col_1, col_2, col_3, col_4, col_5, col_6, unit, add_info, fsar_lock) VALUES('2', '1', '1', '1', '1', '1', '1', '1', '1', '1', 'N')

이 방법에서는 UPDATE가 성공할 때 하나의 문만 실행합니다.

-- For each row in source
BEGIN TRAN    

UPDATE target
SET <target_columns> = <source_values>
WHERE <target_expression>

IF (@@ROWCOUNT = 0)
   INSERT target (<target_columns>)
VALUES (<source_values>)

COMMIT

이게 가장 우아하지 않나요?

REPLACE 
INTO component_psar (tbl_id, row_nr, col_1, col_2, col_3, col_4, col_5, col_6, unit, add_info, fsar_lock) 
VALUES('2', '1', '1', '1', '1', '1', '1', '1', '1', '1', 'N')

참조: http://dev.mysql.com/doc/refman/5.7/en/replace.html

다음 문장을 사용합니다.

IF EXISTS(SELECT * FROM prueba )
then
  UPDATE prueba
  SET nombre = '1', apellido = '1' 
  WHERE cedula = 'ct'
ELSE 
  INSERT INTO prueba (cedula, nombre, apellido)
  VALUES ('ct', 'ct', 'ct');

언급URL : https://stackoverflow.com/questions/12639407/sql-if-exists-update-else-insert-syntax-error

반응형