如何在mysql中使用带IF条件的SELECT触发?
How to use SELECT with IF's condition for trigger in mysql?
我正在尝试创建触发器以在 NULL 时更改尾部列的值。
我知道新生的另一个语法错误,这是一件可笑的事情。但是,这水平比我还高级
您可以开始阅读她的代码:
#1064 - Erreur de syntaxe près de 'select i.id from categorie cat,souscategorie scat,item i,panier p where p.idite=' Ã la ligne 3.
delimiter /
create trigger voiddresstaille before insert on panier for each row
begin
if new.idite=(select i.id from categorie cat,souscategorie scat,item i,panier p where p.idite=i.id and i.idscat=scat.id and scat.idcat=cat.id and cat.nom='Vêtements & Chaussures') then
if new.taille='' || new.taille=NULL then
new.taille='M';
end if;
end if;
end /
如果您不知道答案,请为问题投票以帮助我。谢谢。
你的语法错误。
我将您的查询更改为正确的内部联接
你只能 一个 i.id 从你的选择中,否则这将以错误结束
DROP TRIGGER IF EXISTS voiddresstaille ;
delimiter //
create trigger voiddresstaille before insert on panier for each row
begin
if new.idite = (select i.id
from categorie cat
INNER JOIN souscategorie scat ON scat.idcat=cat.id
INNER JOIN item i ON i.idscat=scat.id
INNER JOIN panier p ON p.idite=i.id
where cat.nom='Vêtements & Chaussures') then
if new.taille='' OR new.taille IS NULL then
SET new.taille='M';
end if;
end if;
end //
DELIMITER ;
仅使用 'select' 命令意味着您可以在您的专栏中使用一行或多行。但是,如果您在命令的末尾添加 'limit 1' ,您将得到一行。
这里的要点是,您不能比较一个值和 table 个值。
仅当您添加到您的条件 'in(select....etc)' 以检查您在 table 的值中的值。
这样你的代码就会像这样:
delimiter /
create trigger voiddresstaille before insert on panier for each row
begin
if new.idite in (select i.id from categorie cat,souscategorie scat,item i,panier p where p.idite=i.id and i.idscat=scat.id and scat.idcat=cat.id and cat.nom='Vêtements & Chaussures') then
if new.taille='' || new.taille=NULL then
new.taille='M';
end if;
end if;
end /
我正在尝试创建触发器以在 NULL 时更改尾部列的值。
我知道新生的另一个语法错误,这是一件可笑的事情。但是,这水平比我还高级
您可以开始阅读她的代码:
#1064 - Erreur de syntaxe près de 'select i.id from categorie cat,souscategorie scat,item i,panier p where p.idite=' Ã la ligne 3.
delimiter /
create trigger voiddresstaille before insert on panier for each row
begin
if new.idite=(select i.id from categorie cat,souscategorie scat,item i,panier p where p.idite=i.id and i.idscat=scat.id and scat.idcat=cat.id and cat.nom='Vêtements & Chaussures') then
if new.taille='' || new.taille=NULL then
new.taille='M';
end if;
end if;
end /
如果您不知道答案,请为问题投票以帮助我。谢谢。
你的语法错误。
我将您的查询更改为正确的内部联接
你只能 一个 i.id 从你的选择中,否则这将以错误结束
DROP TRIGGER IF EXISTS voiddresstaille ;
delimiter //
create trigger voiddresstaille before insert on panier for each row
begin
if new.idite = (select i.id
from categorie cat
INNER JOIN souscategorie scat ON scat.idcat=cat.id
INNER JOIN item i ON i.idscat=scat.id
INNER JOIN panier p ON p.idite=i.id
where cat.nom='Vêtements & Chaussures') then
if new.taille='' OR new.taille IS NULL then
SET new.taille='M';
end if;
end if;
end //
DELIMITER ;
仅使用 'select' 命令意味着您可以在您的专栏中使用一行或多行。但是,如果您在命令的末尾添加 'limit 1' ,您将得到一行。 这里的要点是,您不能比较一个值和 table 个值。 仅当您添加到您的条件 'in(select....etc)' 以检查您在 table 的值中的值。
这样你的代码就会像这样:
delimiter /
create trigger voiddresstaille before insert on panier for each row
begin
if new.idite in (select i.id from categorie cat,souscategorie scat,item i,panier p where p.idite=i.id and i.idscat=scat.id and scat.idcat=cat.id and cat.nom='Vêtements & Chaussures') then
if new.taille='' || new.taille=NULL then
new.taille='M';
end if;
end if;
end /