2015-09-24 7 views
2

У меня есть 2 таблицы, студенты и математика. Я хочу ОБНОВИТЬ существующие данные о Math.Last_name, когда я обновляю student.Last_Name, используя идентификатор, который я обновляю у студентов.обновить другую таблицу при обновлении триггера mysql

Студенты стол

CREATE TABLE `STUDENTS` (
`Date_Modified` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
`LRN` BIGINT(12) NOT NULL AUTO_INCREMENT, 
`Last_Name` VARCHAR(50) NOT NULL, 
`First_Name` VARCHAR(50) NOT NULL, 
PRIMARY KEY (`LRN`) 
)COLLATE='latin1_swedish_ci' 
ENGINE=InnoDB 
AUTO_INCREMENT=123456789112; 

МАТЕМАТИКА ТАБЛИЦА

CREATE TABLE `Math` (
`Date_Modified` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, 
`LRN` BIGINT(12) NOT NULL, 
`Last_Name` VARCHAR(50) NOT NULL, 
`First_Name` VARCHAR(50) NOT NULL, 
`Level` VARCHAR(3) NOT NULL, 
`UT1` VARCHAR(3) NOT NULL, 
`Q1` VARCHAR(50) NULL DEFAULT NULL, 
`UT2` VARCHAR(50) NULL DEFAULT NULL, 
`Q2` VARCHAR(50) NULL DEFAULT NULL, 
`UT3` VARCHAR(50) NULL DEFAULT NULL, 
`Q3` VARCHAR(50) NULL DEFAULT NULL, 
`UT4` VARCHAR(50) NULL DEFAULT NULL, 
`Q4` VARCHAR(50) NULL DEFAULT NULL, 
`FINAL GRADE` VARCHAR(50) NULL DEFAULT NULL, 
PRIMARY KEY (`LRN`) 
) 
COLLATE='latin1_swedish_ci' 
ENGINE=InnoDB 
ROW_FORMAT=COMPACT; 

МОЙ TRIGGER

CREATE TRIGGER `STUDENTS_after_update` AFTER UPDATE ON `STUDENTS` FOR EACH ROW BEGIN 
UPDATE Math 
SET Last_Name = NEW.Last_Name 
WHERE LRN IN (SELECT LRN FROM Math where LRN = NEW.LRN); 
END 
+0

Пожалуйста, поделитесь DDL обеих таблиц и некоторыми примерами данных, как бы это выглядело после того, как обновление происходит на таблице «students». –

+0

сделано с добавлением сэр! – jaredpianist

ответ

0

Вам не нужно суб выбрать в команде обновления, так как для каждой строки будет выбрать обновить новое значение LRN и обновить их все в таблице MATH, где new.LRN соответствует таблице MATH. Вот как триггер будет выглядеть

delimiter // 
create trigger `STUDENTS_after_update` after update on `STUDENTS` 
for each row 
begin 
update Math 
set Last_Name = NEW.Last_Name 
where LRN = NEW.LRN ; 
end;// 

delimiter ; 

Обратите внимание, что я добавил разделитель, который необходим при выполнении их в Mysql CLI, другой пользовательский интерфейс как PhpMyAdmin вам нужно выбрать разделитель из пользовательского интерфейса.

+0

Я уже делал это, но теперь он работает. Раньше это давало мне "subquery возвращает более 1 строки". В любом случае, спасибо! – jaredpianist

+0

Да, вам не нужно предоставлять подзаголовок в части обновления. –