我必须编写一个存储过程来从表中删除记录。
我有一个内存表“tableids”,我存储了要从另一个表中删除的所有ID,比如说“地址”。
CREATE TABLE `tempids` (
`id` INT(11) NULL DEFAULT NULL
)
COLLATE='latin1_swedish_ci'
ENGINE=MEMORY
ROW_FORMAT=DEFAULT
我可以这样做:
DELETE FROM addresses INNER JOIN tempids ON addresses.id = tempids.id;
但是如果我的模型中的其他已知表中没有引用,我想在物理上删除地址表中的记录;否则我想逻辑删除记录。我想一次性做到这一点,就是没有在我的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;
我如何做到这一点?
感谢。
答案 0 :(得分:1)
您可以在删除后检查ROW_COUNT()函数值。
http://dev.mysql.com/doc/refman/5.5/en/information-functions.html#function_row-count
所以“没有删除记录”条件被替换为 ROW_COUNT()== 0