0

1つのtagテーブルと3つtableAのテーブルがありtableB、 3つのテーブルとtableC一緒にタグ付けでき、それらを結合するテーブルがあります。tableA_tagtableB_tagtableC_tag

私のアプリケーションでは、からタグを削除できますtableAtableBまたはtableC、そのうちの1つで現在使用されているタグのみを保持したいと考えています。これまでに、次のトリガーを作成しました。

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また、トリガーを発生させたのと同じテーブルであるため、確認できません。

だから、どうすればいいですか?

4

1 に答える 1

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);
于 2012-08-10T11:04:20.880 に答える