我有这些表格:
Account
(account-number (PK), branch-name (FK), balance
)Branch
(branch-name (PK), branch-city, assets
)有人可以解释一下以下两个陈述之间的区别是什么?我在我的数据库中执行了它们,并且删除的行的结果是相同的。我错过了什么吗?
delete from account
where [branch-name] = 'London'
和
delete from account
where [branch-name] in (select [branch-name]
from branch
where [branch-name]='London')
答案 0 :(得分:5)
区别在于第二个查询检查branch
表中是否存在分支名称,然后在account
表中删除它。
如果分支名称存在于account
表中,但不在branch
表中,则不会从account
表中删除。
第一个查询从account
表中删除记录是否存在branch
表中的分支。
答案 1 :(得分:0)
这些查询完全相同。
首先,您只需从account
中删除branch-name
列值为'London'
在第二步,您也会这样做,但是检查branch-name
是否在列表(查询结果)中返回
select [branch-name] from branch where [branch-name]='London'
,
但它总是返回元素列表'London'
(因为where
子句)。
因此两个查询的结果都是一样的。