这是一个理论问题。假设您有下表:
(ID, FirstName, LastName, Street, ZIP, Country)
ID是主键
然后,您可能有两个或更多同名的人居住在同一地址。因此,当您通过firstname,lastname,streetm zip和country查询它们时,您会得到几个结果。这是有道理的,因为可能发生在一个大型建筑物中,有两个同名的人居住。
如果某个人的ID在别处用作外键,您将如何从该表中删除该人?不是不可能吗?你无从谈论,两个“Steven Smith ABC Blvd. 2 1111 USA”中哪一个是你想要的......?
编辑:更清楚一点:假设在上表中,我有两个客户名称和地址相同,因此只能在主键中删除。他们的ID在其他表中用作外键,所以我不能删除一个客户并说“对,现在我还有一个史蒂夫史密斯生活在......”,因为其他表中引用了另一个史蒂夫史密斯。
你会如何正确删除第一个史蒂夫史密斯?
答案 0 :(得分:0)
如果您要删除未在另一个表中引用的 Steve Smith ,那么您在该表上left join
delete a
from addressTable a
left join secondTable s on s.fkAddressId = a.id
where s.fkAddressId is null
and a.firstName = 'Steve' and a.lastName = 'Smith'