MySql存储过程,根据现有表引用以逻辑或物理方式删除记录
我必须编写一个存储过程来删除表中的记录 我有一个内存表“tableids”,其中存储了要从另一个表中删除的所有ID,比如“addresses” 我可以这样做:MySql存储过程,根据现有表引用以逻辑或物理方式删除记录,mysql,sql,stored-procedures,Mysql,Sql,Stored Procedures,我必须编写一个存储过程来删除表中的记录 我有一个内存表“tableids”,其中存储了要从另一个表中删除的所有ID,比如“addresses” 我可以这样做: DELETE FROM addresses INNER JOIN tempids ON addresses.id = tempids.id; 但是,如果addresses表中的记录在我的模型中的其他已知表中没有引用,那么我希望从物理上删除这些记录;否则,我希望从逻辑上删除记录。我希望在一次快照中完成此操作,即不在SP中写入循环 在伪sq
DELETE FROM addresses INNER JOIN tempids ON addresses.id = tempids.id;
但是,如果addresses表中的记录在我的模型中的其他已知表中没有引用,那么我希望从物理上删除这些记录;否则,我希望从逻辑上删除记录。我希望在一次快照中完成此操作,即不在SP中写入循环
在伪sql代码中:
DELETE
FROM addresses
WHERE
id NOT IN (SELECT address_id FROM othertable1 WHERE address_id=(SELECT id FROM tempids))
AND id NOT IN (SELECT address_id FROM othertable2 WHERE address_id=(SELECT id FROM tempids))
...more possible references in other tables
IF "no records deleted"
DELETE FROM addresses INNER JOIN tempids ON addresses.id = tempids.id;
ELSE
UPDATE addresses SET deleted=TRUE INNER JOIN tempids ON addresses.id = tempids.id;
我如何做到这一点
谢谢。您可以在删除后检查ROW_COUNT()函数值
因此,将“未删除记录”条件替换为行计数()==0
DELETE
FROM addresses
WHERE
id NOT IN (SELECT address_id FROM othertable1 WHERE address_id=(SELECT id FROM tempids))
AND id NOT IN (SELECT address_id FROM othertable2 WHERE address_id=(SELECT id FROM tempids))
...more possible references in other tables
IF "no records deleted"
DELETE FROM addresses INNER JOIN tempids ON addresses.id = tempids.id;
ELSE
UPDATE addresses SET deleted=TRUE INNER JOIN tempids ON addresses.id = tempids.id;