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

Sql 如何手动查找和删除孤立记录-两个表?,sql,Sql,我在这里做了一把小提琴: 由于外部限制,ID(EID和DID)未使用PK指定。我感觉很接近,但是SQL抛出了语法错误,问题可能出在程序上 目标是在使用触发器从employee表中删除记录后,从tableJoin中删除EID=100的行 根据Andrew的评论进行编辑: 我试过: CREATE TRIGGER DeOrphan AFTER DELETE ON employee FOR EACH ROW DELETE FROM joinTable.* FROM employee RIGHT JOIN

我在这里做了一把小提琴:

由于外部限制,ID(EID和DID)未使用PK指定。我感觉很接近,但是SQL抛出了语法错误,问题可能出在程序上

目标是在使用触发器从employee表中删除记录后,从tableJoin中删除EID=100的行

根据Andrew的评论进行编辑:

我试过:

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中

试试这个

DELETE FROM joinTable WHERE EID NOT IN (SELECT eid FROM employee)
这将是一个单独的呼叫,将清除所有孤立项,但如果您定期触发它,这将是一个相当快的过程。

试试这个

DELETE FROM joinTable WHERE EID NOT IN (SELECT eid FROM employee)

这将是一个单独的调用,将清除所有孤立项,但如果您定期触发它,这将是一个相当快速的过程。

不需要
不在
/
不存在
,在触发器中您可以访问已删除的行:

CREATE TRIGGER DeOrphan
AFTER DELETE ON employee
FOR EACH ROW
DELETE FROM joinTable WHERE `eid` =  old.`eid`;

请参见

无需在触发器内设置
不在
/
不存在
,您可以访问已删除的行:

CREATE TRIGGER DeOrphan
AFTER DELETE ON employee
FOR EACH ROW
DELETE FROM joinTable WHERE `eid` =  old.`eid`;

请参见

您应该在问题中显示代码,而不是使用外部站点。您应该在问题中显示代码,而不是使用外部站点。这就是我认为OP所要求的,我打算写一些类似的东西。这就是我认为OP所要求的,我打算写一些类似的东西。这很有效然而,我在PostgreSQL上得到了一个语法错误。PostgreSQL说:语法错误位于或接近“DELETE”。在没有“开斋节”的情况下试过,但有问题persists@RobertTan:当您需要PG语法时,为什么要创建
mysql
fiddle?似乎在PG中,您需要将修改逻辑包装在函数/过程中,然后执行它:我在安装MySQL和使用PG作为代理时遇到了问题,我很抱歉这会带来麻烦,但是我在Postrgresql上遇到了语法错误“PostgreSQL说:语法错误位于或接近“DELETE”。在没有“开斋节”的情况下试过,但有问题persists@RobertTan:当您需要PG语法时,为什么要创建
mysql
fiddle?似乎在PG中,您需要将修改逻辑包装在函数/过程中,然后执行它:我在安装MySQL时遇到问题,并使用PG作为代理,很抱歉给您带来麻烦