如何在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 /