首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql语法问题

mysql语法问题
EN

Stack Overflow用户
提问于 2010-06-17 22:00:24
回答 3查看 141关注 0票数 1

我正试图在MySQL上创建一个触发器,但我遇到了一个语法问题,我找不到它。如果有更多经验的人可以帮助我,那就太好了(这是我第一次使用MySQL!)

我之所以创建这个触发器是为了删除所有孤立的“标签”,它与"service_descriptor“有多对多的关系(这两个实体由service_labels链接)。

我的代码是:

代码语言:javascript
复制
CREATE TRIGGER `trg_delete_orphan_label` AFTER DELETE 
FOR EACH ROW ON `restdb`.`service_labels`  
  DELETE FROM `restdb`.`labels`
   WHERE EXISTS (SELECT *
                   FROM old D 
              LEFT_JOIN `restdb`.`service_labels` SL ON SL.`id_label` = D.`id_label` 
                                                    AND D.`id_service` = SL.`id_service`
                  WHERE SL.`id_label` IS NULL
                        `restdb`.`labels`.`id` = D.SL.`id_label`); 

提前感谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-06-18 02:31:39

谢谢大家。多亏了你的帮助我终于解决了。

最后,我们的工作是:

restdb上删除后创建触发器trg_delete_orphan_labelservice_descriptor

对于每个行,DELETE FROM restdb.labels WHERE id NOT IN ( SELECT restdb FROM restdb.service_labels );

票数 0
EN

Stack Overflow用户

发布于 2010-06-17 22:22:07

你错过了和

试试这段代码

代码语言:javascript
复制
CREATE TRIGGER `trg_delete_orphan_label` AFTER DELETE FOR EACH ROW ON `restdb`.`service_labels`   
    DELETE 
    FROM 
        `restdb`.`labels` 
    WHERE 
        EXISTS (SELECT 
                    * 
                FROM 
                    old D LEFT_JOIN 
                    `restdb`.`service_labels` SL ON 
                        SL.`id_label` = D.`id_label` AND 
                        D.`id_service` = SL.`id_service` 
                WHERE 
                    SL.`id_label` IS NULL AND
                    `restdb`.`labels`.`id` = D.SL.`id_label`                         
                    );  
票数 1
EN

Stack Overflow用户

发布于 2010-06-18 00:09:44

触发器有几个问题,最明显的是"FOR EACH ROW“的位置,以及当它实际上只是一行的时候,你像对待一张表一样对待旧的方式。

这对你来说应该是可行的:

代码语言:javascript
复制
DROP TRIGGER IF EXISTS `trg_delete_orphan_label`;

CREATE TRIGGER `trg_delete_orphan_label` AFTER DELETE ON `service_labels` 
FOR EACH ROW
    DELETE FROM `labels`
    WHERE `id` = OLD.`id_label`
    AND NOT EXISTS (
        SELECT NULL
        FROM `service_labels` SL 
        WHERE SL.`id_label` = `labels`.`id`                        
    );                     
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3062276

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档