简体   繁体   English

MYSQL TRIGGER子查询更新

[英]MYSQL TRIGGER subquery update

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. 我是使用SQL的新手,我在SQLSERVER中开发了一个运行完美的触发器,现在我正尝试将其转换为可在Mysql中使用,但不起作用,我也不知道该怎么做。

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. Tks。

The X subquery does not have a field called idnivel , so the case statement will not compile. X子查询没有名为idnivel的字段,因此case语句将不会编译。

I assume what you want here is nivel , which would make the full trigger; 我假设您想要的是nivel ,它将触发全部触发;

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
//

See it compile here . 看到它在这里编译

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM