I'm new working with my SQL, and I develop a trigger in SQLSERVER that is running perfect, now I'm trying to convert it, to use in Mysql, but doesn't work and I don't know what to do.
here's the code:
CREATE TRIGGER tg_test AFTER UPDATE ON YET FOR EACH ROW
INSERT INTO CONTROLETRIGGER(idAluno, idNivel)
values(NEW.IdAluno, NEW.idNivel);
UPDATE HistoricoNivel AS E
join(
select max(h.idNivel) Nivel, h.idAluno
from HistoricoNivel h
join CONTROLETRIGGER v on h.idaluno = v.idaluno
WHERE h.dtFim is null
group by h.idAluno
)X on E.idAluno = X.idAluno and E.idNivel= X.Nivel
join CONTROLETRIGGER vi on vi.idaluno = E.idAluno
set E.dtFim = case when X.idnivel <> vi.idNivel then CURRENT_DATE() else null end
Please, what i'm doing wrong ?
Tks.
The X
subquery does not have a field called idnivel
, so the case statement will not compile.
I assume what you want here is nivel
, which would make the full trigger;
CREATE TRIGGER tg_test AFTER UPDATE ON YET FOR EACH ROW
INSERT INTO CONTROLETRIGGER(idAluno, idNivel) VALUES (NEW.IdAluno, NEW.idNivel);
UPDATE HistoricoNivel AS E
JOIN(
SELECT MAX(h.idNivel) Nivel, h.idAluno
FROM HistoricoNivel h
JOIN CONTROLETRIGGER v ON h.idaluno = v.idaluno
WHERE h.dtFim IS NULL
GROUP BY h.idAluno
) X
ON E.idAluno = X.idAluno AND E.idNivel= X.Nivel
JOIN CONTROLETRIGGER vi ON vi.idaluno = E.idAluno
SET E.dtFim = CASE WHEN X.nivel <> vi.idNivel THEN CURRENT_DATE() ELSE NULL END
//
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.