我在这里做了一个小提琴:http://sqlfiddle.com/#!9/a67558/1
由于外部限制,未使用PK指定ID(EID和DID)。我觉得我很接近,但SQL会抛出语法错误,问题可能与程序有关吗?
目标是在使用触发器从employee表中删除记录后,从tableJoin中删除EID = 100的行。
编辑每个安德鲁的评论:
我试过了:
CREATE TRIGGER DeOrphan
AFTER DELETE ON employee
FOR EACH ROW DELETE FROM joinTable.* FROM employee
RIGHT JOIN tableJoin ON employee.eid=tableJoin.eid
WHERE employee.eid IS NULL;
DELETE FROM employee
WHERE employee.eid = 100;
记录已从employee表中成功删除,但仍保留在tableJoin中。
答案 0 :(得分:1)
试试这个
<ul class="main-posts">
<% for(var i=0; i < posts.length; i++) { %>
<div class="postbg">
<li class="li-post"><strong><%= posts[i].pTitle %></strong></li>
<li class="li-author"><strong>Author:</strong> <%= posts[i].author %></li>
<li class="li-content"><%- posts[i].content %></li>
</div>
<br />
<% }; %>
</ul>
这将是一个单独的调用,并将清理所有孤儿,但如果你经常触发它,它应该是一个相当快的过程。
答案 1 :(得分:1)
不需要NOT IN
/ NOT EXISTS
,在触发器中您可以访问已删除的行:
CREATE TRIGGER DeOrphan
AFTER DELETE ON employee
FOR EACH ROW
DELETE FROM joinTable WHERE `eid` = old.`eid`;
请参阅fiddle