존재하지 않는 경우 - Mariadb 구문
새 행을 삽입하거나 이미 포함된 경우 기존 행을 업데이트하려고 했습니다.
인덱스로도 해볼 수 있을 것 같았는데 솔직히 어떻게 해야 할지 몰라서 IF 문장으로 해보려고 했어요.안타깝게도 구문에도 문제가 있다고 표시되기 때문에 이것도 작동하지 않습니다.MariaDB를 사용하고 있습니다.
IF NOT EXISTS (SELECT * FROM valuation
WHERE ticker = 'BK001EUR' AND depot_id =1
AND src_id =2 AND valuation_date ='2009-09-09')
INSERT INTO valuation (ticker,depot_id,src_id,valuation_date,value)
VALUES ('BK001EUR',1,2,'2009-09-09',14999260.46)
ELSE
UPDATE valuation
SET value =14999260.46
WHERE ticker = 'BK001EUR' AND depot_id =1
AND src_id =2 AND valuation_date ='2009-09-09');
이를 위한 적절한 방법은insert ... on duplicate key update
질문 내용은 다음과 같습니다.
INSERT INTO valuation (ticker, depot_id, src_id, valuation_date, value)
VALUES ('BK001EUR', 1, 2, '2009-09-09', 14999260.46)
ON DUPLICATE KEY UPDATE value = VALUES(value);
(의 사용에 주의해 주세요.VALUES()
따라서 입력을 반복할 필요가 없습니다.)
이 작업을 수행하려면 관심 있는 키에 고유한 인덱스가 필요합니다.
create unique index unq_valuation_4 on valuation(ticker, depot_id, src_id, valuation_date);
중복 키는 프라이머리 키인덱스일 필요는 없습니다.
원하는 인덱스를 지정할 수 있습니다.
다음을 사용할 수 있습니다.
-- if exists then it will update
UPDATE valuation
SET value =14999260.46
WHERE ticker = 'BK001EUR'
AND depot_id =1 AND src_id =2 AND valuation_date ='2009-09-09';
-- if not exist then insert
INSERT INTO valuation (ticker,depot_id,src_id,valuation_date,value)
SELECT 'BK001EUR',1,2,'2009-09-09',14999260.46
-- FROM dual
WHERE NOT EXISTS (SELECT 1
FROM valuation
WHERE ticker = 'BK001EUR'
AND depot_id =1
AND src_id =2 AND valuation_date ='2009-09-09');
또는 더 나은 방법:
INSERT INTO valuation (ticker,depot_id,src_id,valuation_date,value)
VALUES ('BK001EUR',1,2,'2009-09-09',14999260.46)
ON DUPLICATE KEY UPDATE value =14999260.46;
같은 값의 레코드가 있는 경우 데이터를 삽입해서는 안 되는 유사한 INSERT-스테이트먼트를 시도했습니다.'FROM DUAL'을 추가할 때까지 내 문장은 작동하지 않았습니다.
INSERT INTO measurement
(sensorid, parameterid, measuredatetime, measure)
SELECT sensoridIn,parameteridIn,measuredatetimeIn,measureIn
FROM DUAL
WHERE NOT EXISTS (SELECT *
FROM measurement
WHERE sensorid = sensorId
AND measuredatetime = measuredatetimeIn
AND measure = measureIn
AND parameterid = parameteridIn);
자세한 내용은 https://mariadb.com/kb/en/dual/ 및 MySQL에서 '존재하지 않는 경우 삽입'을 수행하는 방법을 참조하십시오.
언급URL : https://stackoverflow.com/questions/45689582/if-not-exists-mariadb-syntax
'source' 카테고리의 다른 글
Java regex에서 그룹을 바꿀 수 있습니까? (0) | 2022.11.14 |
---|---|
일반 인수 vs. 키워드 인수 (0) | 2022.11.13 |
numpy reshape에서 -1은 무엇을 의미합니까? (0) | 2022.11.13 |
Talend가 열을 타임스탬프로 구문 분석할 수 없습니다. (0) | 2022.11.13 |
외부 키를 사용하는 것이 좋습니까, 아니면 고유 ID를 할당하는 것이 좋습니까? (0) | 2022.11.13 |