我有两张桌子。一个名为peoples
的人称为addresses
。 peoples
表在address
表(peoples.address_id = addresses.address_id
)上有外部约束。多个人可能具有相同的地址。 address
表
addresses
列有一个唯一约束
我遇到了一种情况,我必须从peoples
表中删除一个人以及addresses
表上的相关地址,如果peoples
表中没有其他记录{} 1}}具有相同地址的表。
我怎样才能在MySQL中这样做?
答案 0 :(得分:2)
您可以使用下面的NOT EXISTS
子句
DELETE FROM addresses
WHERE NOT EXISTS
(SELECT * FROM peoples WHERE peoples.address_id=addresses.address_id)
对此的缺点是它会非常慢,因为它将为每个存在的地址行重新运行查询。否则它应该解决问题。
先删除此人。然后,如果地址没有人
,则此查询将删除答案 1 :(得分:2)
这比执行子查询更有效:
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>'
。