删除多个表之间共享的未使用条目

时间:2012-08-10 10:43:15

标签: mysql sql triggers many-to-many

我有一个tag表格和三个tableAtableBtableC表格,这些表格可以标记,还有三个tableA_tagtableB_tagtableC_tag表加入他们。

我的应用程序允许从tableAtableBtableC中删除代码,并且我只想保留其中一个代码中当前使用的代码。 到目前为止,我已经写了以下触发器:

CREATE TRIGGER plop after DELETE
ON tableA_tag
FOR EACH row
  DELETE FROM tag
  WHERE  tag.id = old.tag_id
         AND (SELECT Sum(countTags.c) AS s
              FROM   (SELECT Count(*) AS c
                      FROM   tableC_tag
                      WHERE  tag_id = old.tag_id
                      UNION
                      SELECT Count(*) AS c
                      FROM   tableB_tag
                      WHERE  tag_id = old.tag_id) countTags) = 0; 

/* Same trigger for table tableB_tag  */

/* And same again for table tableC_tag */

但它不起作用,因为它会检查标记是否仍然在tableC_tagtableB_tag中使用,但不会检入tableA_tag并且即使它们仍然仍然可以删除标记正在使用。我无法检查tableA_tag,因为它是触发触发器的同一个表。

那么,我该怎么办?

1 个答案:

答案 0 :(得分:0)

希望这有效......

CREATE TRIGGER plop after DELETE

ON tableA_tag

FOR EACH row

  DELETE FROM tag

  WHERE  tag.id = old.tag_id 

    and not exists(select ' ' from tableC_tag where tableC_tag.tag_id =tag.id)
    and not exists(select ' ' from tableB_tag where tableB_tag.tag_id =tag.id)   
    and not exists(select ' ' from tableA_tag where tableA_tag.tag_id =tag.id);