如何在mysql触发器中使用别名?

如何在mysql触发器中使用别名?,mysql,triggers,alias,Mysql,Triggers,Alias,我正在尝试创建此mysql触发器: DELIMITER // CREATE TRIGGER checkcollision2 AFTER UPDATE ON projectiles p1 FOR EACH ROW BEGIN IF (SELECT count(*) FROM players p WHERE p.wolf=1 AND NEW.x>=p.x AND NEW.x<=p.x+25 AND NEW.y>=p.y AND NEW.y&l

我正在尝试创建此mysql触发器:

DELIMITER // 
CREATE TRIGGER checkcollision2 AFTER UPDATE ON projectiles p1 
    FOR EACH ROW 
    BEGIN 
        IF (SELECT count(*) FROM players p WHERE p.wolf=1 AND NEW.x>=p.x AND NEW.x<=p.x+25 AND NEW.y>=p.y AND NEW.y<=p.y+25) > 0 THEN 
            DELETE FROM projectiles p2 WHERE p1.id=p2.id;
        END IF; 
    END;// 
DELIMITER ; 
但这不起作用,因为它会出现语法错误。我不确定这是否是因为我正在为表使用别名。我这样做是因为,如果if语句为true,那么我想删除触发器启动的当前更新行。我想我可以通过从同一个表中进行删除来做到这一点,其中id是相同的,但是如果我不使用alias,那么该表中的所有行都将被删除


有人看到这里有什么问题吗?

不支持触发器签名级别标识上的别名,因此不正确。 如果需要,您可以在触发器主体中定义别名

当您希望基于条件执行删除操作时,可以使用NEW与特定的行-列值进行比较。当前where子句,其中p1.id=p2.id将从表中删除所有行,这是不安全的

更改触发器定义,如下所示:

DELIMITER // 

DROP TRIGGER IF EXISTS checkcollision2 //

CREATE TRIGGER checkcollision2 AFTER UPDATE ON projectiles 
    FOR EACH ROW 
    BEGIN 
        DELCARE match_count INT DEFAULT 0;
        SELECT count(*) INTO match_count
          FROM players p 
         WHERE p.wolf = 1
           AND NEW.x BETWEEN p.x AND ( p.x + 25 )
           AND NEW.y BETWEEN p.y AND ( p.y + 25 )

        IF match_count > 0 THEN
            DELETE FROM projectiles WHERE id = NEW.id;
        END IF; 
    END; 

    // 

DELIMITER ;