1

我有两张桌子。一个叫peoples另一个叫addresses。该peoples表对表有一个外部约束address( peoples.address_id = addresses.address_id) 多个人可能有相同的地址。表上的address列存在唯一约束addresses

我遇到了一种情况,我必须从表中删除一个人以及peoples表上的关联地址,addresses如果且仅当表中没有其他peoples具有相同地址的记录时。

我该如何在 MySQL 中执行此操作?

4

2 回答 2

3

您可以使用NOT EXISTS如下子句

DELETE FROM addresses 
WHERE NOT EXISTS 
(SELECT * FROM peoples WHERE peoples.address_id=addresses.address_id)

这样做的缺点是它会很慢,因为它将为每个存在的地址行重新运行查询。否则应该可以解决问题。

先删人。如果地址没有人,则此查询将删除

于 2013-11-13T02:46:02.303 回答
3

这应该比执行子查询更高效:

DELETE
    addresses
FROM
    addresses
    LEFT JOIN peoples
        ON addresses.address_id = peoples.address_id
WHERE
    peoples.address_id IS NULL

它应该删除表中未引用的所有地址peoples。如果您只想删除有问题的特定地址,请在WHERE子句中添加一些内容,例如AND addresses.address_id = '<address_id>'.

例子

于 2013-11-13T02:52:07.003 回答