sql – 删除语句 – 子查询应该抛出错误

前端之家收集整理的这篇文章主要介绍了sql – 删除语句 – 子查询应该抛出错误前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我创建了两个表,T1和T2,每个表分别有一列,abc和xyz.我在每个表中插入了2行(数值1和2).

当我运行命令“从t2选择abc”时,它会抛出一个错误,表示表T2中不存在列abc.但是,当我运行命令“从t1删除abc in(SELECT abc from t2);”时,删除2行.

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

create table t1 (abc number); –Table created

create table t2 (xyz number); –Table created

insert into t1 values (1); –One row inserted

insert into t1 values (2); –One row inserted

insert into t2 values (1); –One row inserted

insert into t2 values (2); –One row inserted

SELECT abc from t2; –ORA-00904 -> Because column abc does not exist in t2

delete from t1 where abc in (SELECT abc from t2); –2 rows deleted

解决方法

如果您使用表名作为别名以确保选择了表t2列,您​​将收到错误,即
delete from t1 where abc in (SELECT t2.abc from t2); --ORA-00904

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

猜你在找的MsSQL相关文章