我有一个tag
表格和三个tableA
,tableB
,tableC
表格,这些表格可以标记,还有三个tableA_tag
,tableB_tag
和tableC_tag
表加入他们。
我的应用程序允许从tableA
,tableB
或tableC
中删除代码,并且我只想保留其中一个代码中当前使用的代码。
到目前为止,我已经写了以下触发器:
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_tag
或tableB_tag
中使用,但不会检入tableA_tag
并且即使它们仍然仍然可以删除标记正在使用。我无法检查tableA_tag
,因为它是触发触发器的同一个表。
那么,我该怎么办?
答案 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);