2010-06-30 48 views
2

任何人都可以提出一种更干净的方法来在一个查询中删除具有一对多关系的行吗?如何重构此多表删除语句

这是有效的,但我不是很熟悉using子句或delete,所以我不完全了解它是如何工作的。

DELETE FROM ip_record, 
      entry using ip_record 
      inner join entry 
     where ip_record.site_id = ? 
     and ip_record.ip = ? 
     and ip_record.id = entry.ip_id 

我有一个想法,这可能与级联更干净做,但我有约束的非理性的恐惧。数据库是MySQL。

回答

4

是,加约束如下

ALTER TABLE entry 
    ADD CONSTRAINT constr_entry_fk_ip 
    FOREIGN KEY fk_ip (ip_id) REFERENCES ip_record (id) 
    ON DELETE CASCADE ON UPDATE CASCADE 

,然后你可以使用

DELETE FROM ip_record 
WHERE ip_record.site_id=? and ip_record.ip=? 

做以前需要加入。

+1

谢谢,我真的很感激你通过我走了! – JAL 2010-06-30 18:04:59