Sql Delete语句-子查询应引发错误

Sql Delete语句-子查询应引发错误,sql,oracle,subquery,delete-row,Sql,Oracle,Subquery,Delete Row,我创建了两个表,T1和T2,每个表有一列,分别是abc和xyz。我在每个表中插入了两行数值1和2 当我运行select abc from t2命令时,它抛出一个错误,表示表t2中不存在列abc。但是,当我运行命令delete from t1,其中abc在SELECT abc from t2;,删除2行 删除不应该失败吗,因为我使用了在子查询中失败的相同语句 创建表t1 abc编号-创建的表 创建表t2 xyz编号-创建的表 插入t1值1-插入一行 插入t1值2-插入一行 插入t2值1-插入一行

我创建了两个表,T1和T2,每个表有一列,分别是abc和xyz。我在每个表中插入了两行数值1和2

当我运行select abc from t2命令时,它抛出一个错误,表示表t2中不存在列abc。但是,当我运行命令delete from t1,其中abc在SELECT abc from t2;,删除2行

删除不应该失败吗,因为我使用了在子查询中失败的相同语句

创建表t1 abc编号-创建的表

创建表t2 xyz编号-创建的表

插入t1值1-插入一行

插入t1值2-插入一行

插入t2值1-插入一行

插入t2值2-插入一行

从t2中选择abc-ORA-00904->因为t2中不存在abc列

从t1中删除,其中abc在t2中选择abc-删除2行


如果使用表名作为别名以确保选中表t2列,则会出现错误,即

 delete from t1 where abc in (SELECT t2.abc from t2); --ORA-00904 

原始查询没有失败,因为它使用表t1的abc列,因为表t1在子查询中可见。

您的Delete语句正在工作,因为您在Where条件中使用了abc列名。子查询是基于where条件列执行的,因为我们不使用表别名

如果你看到这些查询

从t1中选择*其中abc在t2中选择abc;-它会有两排

从t1中选择*其中abc在t2中选择1;-它将给出1行

从t1中选择*其中abc在t2中选择2;-它将取回第二排

从t1中选择*其中abc在t2中选择3;-我们得不到数据


从t1中选择*其中abc从t2中选择hg;-无效标识符

我猜这是因为DELETE语句中的abc表示1中的abc尝试在上次查询中运行select以确认返回的是哪些行,然后您将更好地了解返回的是哪些abc值谢谢您的答复。当我使用别名delete from t1,其中abc在SELECT t2.abc from t2中,它抛出一个错误。但是,它不应该抛出一个错误,即使没有它,因为我已经使用了从t2选择abc?