MySql에서 INSERT ~ SELECT ~ ON DUPLICATE KEY 쿼리에 문제가 있습니까?
안녕하세요, 여러분.
INSERT를 사용하는 쿼리를 만들었습니다.업데이트...중복으로.
하지만 제가 만든 쿼리는 구문 문제와 이유를 모르기 때문에 작동하지 않았습니다!
여기 제가 하려고 했던 것이 있습니다.
제가 하려고 하는 것은 모든 계정에 세 가지 '마법의 물약'을 주는 것입니다.
먼저, 나는 두 개의 테이블을 만들었습니다.
CREATE TABLE account(
account_no INT AUTO_INCREMENT,
account_id VARCHAR(32) NOT NULL,
account_pw VARCHAR(40) NOT NULL,
PRIMARY KEY(account_no)
);
CREATE TABLE item(
item_no INT AUTO_INCREMENT,
account_id VARCHAR(32) NOT NULL,
item_name VARCHAR(32) NOT NULL,
item_count SMALLINT NOT NULL,
item_status SMALLINT NOT NULL,
PRIMARY KEY(item_no)
);
두 번째로, 저는 시험을 위해 3개의 계정을 넣었습니다.
INSERT INTO account (account_id, account_pw) VALUES ('James', MD5('James')), ('Andy', MD5('James')), ('Angela', MD5('James'));
셋째, 저는 모든 계정에 magic_potion을 주었습니다.
INSERT
INTO item
SELECT NULL, A.account_id, item_name, item_count, item_status
FROM account A
CROSS JOIN (SELECT 'magic_potion' AS item_name, 3 AS item_count, 1 AS item_status) B;
네 번째, 다른 계정을 넣었습니다.
INSERT INTO account (account_id, account_pw) VALUES ('Judy', MD5('Judy')), ('Tom', MD5('Tom'));
다섯째, 이제 새로 추가된 계정에 (=INSERT) 두 개의 'sshd_potion'을 주고 이전 계정에 하나의 'sshd_potion'을 추가(=UPDATE)하려고 합니다.그래서 아래 질문을 했습니다.
INSERT
INTO item
SELECT NULL, A.account_id, item_name, item_count, item_status
FROM account A
CROSS JOIN (SELECT 'magic_potion' AS item_name, 3 AS item_count, 1 AS item_status) B
ON DUPLICATE KEY UPDATE item_name = 'magic_potion', item_count = item_count + 1, item_status = 1;
하지만 이 쿼리는 작동하지 않았습니다.시스템 메시지에 다음과 같이 표시됩니다.
Error code: 1064
You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'KEY UPDATE item_name = 'magic_potion', item_count = item_count + 1, item_status ' at line 6
제 질문에 무슨 문제가 있는지 모르겠어요.
제발, 도와주세요.
감사해요!
구문 오류는 쉽습니다.[CROSS] JOIN선택 사항으로 사용할 수 있습니다.ON그래서 파서는 생각합니다.ON DUPLICATE ...그런 조항입니다.구문 오류를 방지하려면 다음을 포함해야 합니다.SELECT대괄호 안에:
INSERT
INTO item (
SELECT NULL, A.account_id, item_name, item_count, item_status
FROM account A
CROSS JOIN (SELECT 'magic_potion' AS item_name, 3 AS item_count, 1 AS item_status) B
) ON DUPLICATE KEY UPDATE item_name = 'magic_potion', item_count = item_count + 1, item_status = 1;
참고로,CROSS여기서는 중복됩니다.
그러면 문맥 문제에 부딪힐 것입니다(모호함).item_count) 아직 해결할 필요가 없습니다. 어차피 쿼리는 기대하는 것을 수행하지 않기 때문입니다.그것은 결코 도달하지 않을 것입니다.ON DUPLICATE KEY UPDATE절, 유일한 고유 키가 기본 키이기 때문입니다.item_no그리고 당신은 삽입하고 있습니다.NULL즉, 항상 자동 검색을 통해 생성됩니다. 즉, 매번 행을 계속 삽입합니다.
이에 대한 해결책은 정확히 무엇을 달성하고자 하는지에 따라 다릅니다. 쿼리를 수정하거나 추가할 수 있습니다.UNIQUE KEY해당 테이블에서 고유해야 하는 필드 또는 조합(아마도.account_id아니면 조합일 수도 있습니다.account_id+item_name데이터 샘플에서 알 수 없음).
언급URL : https://stackoverflow.com/questions/41077191/whats-wrong-with-my-insert-select-on-duplicate-key-query-on-mysql
'programing' 카테고리의 다른 글
| 로컬에서 작동하지만 서버에서는 작동하지 않는 클립보드 기능 복사 (0) | 2023.08.17 |
|---|---|
| jQuery 버전 1, 버전 2, 버전 3의 차이점은 무엇입니까? (0) | 2023.08.17 |
| PowerShell에서 gcloud cmdlet을 찾을 수 없는 이유는 무엇입니까? (0) | 2023.08.17 |
| 유닉스 시간을 날짜 및 시간으로 신속하게 변환 (0) | 2023.08.17 |
| dataType vs accepts - Ajax 요청 (0) | 2023.08.17 |