Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MYSQL触发器子查询更新_Mysql_Sql_Phpmyadmin - Fatal编程技术网

MYSQL触发器子查询更新

MYSQL触发器子查询更新,mysql,sql,phpmyadmin,Mysql,Sql,Phpmyadmin,我刚开始使用SQL,我在SQLSERVER中开发了一个运行完美的触发器,现在我正在尝试将其转换为Mysql,但不起作用,我不知道该怎么办 代码如下: 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( se

我刚开始使用SQL,我在SQLSERVER中开发了一个运行完美的触发器,现在我正在尝试将其转换为Mysql,但不起作用,我不知道该怎么办

代码如下:

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
拜托,我做错了什么

Tks.

X子查询没有名为idnivel的字段,因此不会编译case语句

我想你想要的是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
//

.

什么不起作用?不是吗?没有达到预期的效果。。。?另外,你可能想显示实际的触发器,而不仅仅是其中的查询,如果这是更新的内容…?它没有编译,这是我的触发器的代码。好吧,如果你想要一个触发器,那么CREATE trigger肯定丢失了…哈哈哈,我知道这个@Joachim,我认为没有必要把它放在这里。仍然没有运行。我用的是phpmyadmin。仅创建了一个状态。当我把这两个都放进去时,我在第2行遇到了一个错误。phpmyadmin可能有问题吗?@FpontoDesenv添加分隔符时需要更改分隔符,这样它就不会认为过程在第一次结束时结束;。请注意,SQLFIDLE更改为//而不是;。不知道如何在PHPmyadmin中执行,但是在正常的MySQL命令提示符中,您需要在添加proc之前发出delimiter//和delimiter;添加后再返回。谢谢你,Joachim。我使用存储过程来实现这一点。