为什么我们在多次删除'DELETE'之后提供别名

时间:2015-06-29 19:49:11

标签: mysql sql join

这可能是一个非常愚蠢的问题,但我很想知道是否有人有任何建议:

单表删除正确查询:从car_owner中删除,其中id = 3;

单表删除错误查询:从vehicle_owner v中删除v.id = 3

多表删除:从车辆v,类别s删除v,s,其中v.id = 3,v.id = s.id;

问题1:我想知道为什么第一个是正确的,为什么第二个是不正确的。基本上我正在寻找合乎逻辑的答案,这解释了为什么在删除查询中提供别名是不正确的。

问题2:为什么我们在'DELETE'关键字之后保留两个别名以进行多次删除。无论如何,我们提供加入条件的完整细节。那么为什么它是以这种方式设计的。

2 个答案:

答案 0 :(得分:2)

  1. 第二个是不正确的,因为如果使用别名,则SQL语句被视为多表DELETE的一个版本,恰好只有一个表指定。因此,它必须遵循多表DELETE的其他规则。单表DELETE的语法没有空间来指定别名。

  2. 您不需要拥有别名,但您需要指定要删除的表。因此,您可以在DELETE关键字后面直接列出表格或其别名。否则,MySQL将不知道是仅从第一个表中删除行(其他表是否存在以进行过滤)或从所有表中删除行或某些组合。

  3. 请参阅:https://dev.mysql.com/doc/refman/5.5/en/delete.html

答案 1 :(得分:1)

第二个示例的完整正确语法是:

delete v from vehicle_owner as v where v.id = 3

一旦你指定了别名,你还需要在delete子句中指定它。

对于你的第二个问题,我不太确定你在问什么。