У меня есть две таблицы: EVENTS и EVENT_ATTENDEES.
Я хотел бы попытаться вставить строку в event_attendees, и если call_sign и event_id уже существуют в таблице, она должна обновить ответ для этой строки, а не вставлять новую.
Таблица событий
CREATE TABLE 'events' (
'event_id' int(11) NOT NULL,
'created_by' varchar(1000) NOT NULL,
'event_type' varchar(1000) NOT NULL,
'event_name' varchar(1000) NOT NULL,
'event_start' datetime NOT NULL,
'event_end' datetime NOT NULL,
'max_attendees' varchar(10) NOT NULL,
'open_registration' varchar(10) NOT NULL
)
ALTER TABLE 'events'
ADD PRIMARY KEY ('event_id');
ALTER TABLE 'events'
MODIFY 'event_id' int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=11
Участники мероприятия
CREATE TABLE 'event_attendees' (
'id' int(11) NOT NULL,
'event_id' int(11) NOT NULL,
'call_sign' varchar(10) NOT NULL,
'response' varchar(10) NOT NULL
)
ALTER TABLE 'event_attendees'
ADD PRIMARY KEY ('id'),
ADD UNIQUE KEY 'event_id_2' ('event_id','call_sign'),
ADD KEY 'event_id' ('event_id') USING BTREE;
ALTER TABLE 'event_attendees'
MODIFY 'id' int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=15;
ALTER TABLE 'event_attendees'
ADD CONSTRAINT 'event_id_fk' FOREIGN KEY ('event_id') REFERENCES 'events' ('event_id') ON DELETE CASCADE ON UPDATE NO ACTION;
Я пробовал следующий запрос, но постоянно получаю сообщение об ошибке (я создал событие с event_id = 10):
INSERT INTO event_attendees
(event_id, call_sign, response)
VALUES
('10', '007', 'Declined')
ON DUPLICATE KEY UPDATE
response = VALUES('Declined')
"# 1064 - У вас есть ошибка в синтаксисе SQL, проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса, используемого рядом с '' test ')' в строке 6"
Здесь нет необходимости в VALUES
. Измените свой запрос как:
INSERT INTO event_attendees
(event_id, call_sign, response)
VALUES
('10', '007', 'Declined')
ON DUPLICATE KEY UPDATE
response = 'Declined'
Из документа:
вы можете использовать функцию VALUES (col_name), чтобы ссылаться на значения столбцов из INSERT-части инструкции INSERT... ON DUPLICATE KEY UPDATE
Здесь вы можете найти больше о функции VALUES
.
VALUES('Declined')
должно бытьVALUES(`response`)
- используйте обратные метки для имен столбцов и таблиц. Если вы хотите, чтобы значение было «Отклонено» в обновлении, используйте'Declined'
без функции ЗНАЧЕНИЕ