如何手动查找和删除孤立记录 - 两个表?

时间:2016-03-22 18:09:32

标签: sql

我在这里做了一个小提琴: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中。

2 个答案:

答案 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