这可能是一个非常愚蠢的问题,但我很想知道是否有人有任何建议:
单表删除正确查询:从car_owner中删除,其中id = 3;
单表删除错误查询:从vehicle_owner v中删除v.id = 3
多表删除:从车辆v,类别s删除v,s,其中v.id = 3,v.id = s.id;
问题1:我想知道为什么第一个是正确的,为什么第二个是不正确的。基本上我正在寻找合乎逻辑的答案,这解释了为什么在删除查询中提供别名是不正确的。
问题2:为什么我们在'DELETE'关键字之后保留两个别名以进行多次删除。无论如何,我们提供加入条件的完整细节。那么为什么它是以这种方式设计的。
答案 0 :(得分:2)
第二个是不正确的,因为如果使用别名,则SQL语句被视为多表DELETE
的一个版本,恰好只有一个表指定。因此,它必须遵循多表DELETE
的其他规则。单表DELETE
的语法没有空间来指定别名。
您不需要拥有别名,但您需要指定要删除的表。因此,您可以在DELETE
关键字后面直接列出表格或其别名。否则,MySQL将不知道是仅从第一个表中删除行(其他表是否存在以进行过滤)或从所有表中删除行或某些组合。
答案 1 :(得分:1)
第二个示例的完整正确语法是:
delete v from vehicle_owner as v where v.id = 3
一旦你指定了别名,你还需要在delete子句中指定它。
对于你的第二个问题,我不太确定你在问什么。