DELETE 之后的别名是什么意思?
例如我有一个查询:
DELETE p1
FROM Person p1, Person p2
WHERE p1.Email = p2.Email AND p2.Id < p1.Id
这是什么意思DELETE p1
?
我理解如下。Person
首先,我们找到表与自身的笛卡尔积。然后我们删除Email
两个表(p1
和p2
)中的所有行不同。Id
然后我们删除fromp2
大于或等于Id
from的所有行p1
。现在我们留下了一些行。我们从左侧行的部分中选择所有Id
s并从初始表中删除所有条目,该表包含在所选择的 s 中。p1
Person
Id
Id
我的理解正确吗?
如果正确,则DELETE p1
意味着删除行的结果部分中Person
where Id
is 中的所有条目。p1
想象一下,删除是一个由 2 个步骤组成的过程。在第一步,服务器执行相应的
SELECT *
选择,并标记必须删除的行。在第二步,它删除标记的行。查询中的DELETE p1意味着只有从别名为 as 的表中选择的行
p1
必须标记为删除。如果您使用 DELETE p1、p2或简单地 DELETE FROM,则所有表副本中的选定行都会被标记。