【发布时间】:2013-12-21 02:55:33
【问题描述】:
我有一段 SQL(您会认为)不会编译,而是从目标表中删除所有行。
考虑这个设置:
create table TableA (ColumnA varchar(200));
create table TableB (ColumnB varchar(200));
insert TableA values ('A'),('B'),('C');
insert TableB values ('A');
然后是下面的sql:
--Returns all rows from TableA
select * from TableA;
--Does not error (ColumnA does not exist on TableB)
delete TableA where ColumnA in (select ColumnA from TableB)
--No Rows are returned
select * from TableA;
上面的删除语句会导致从TableA 中删除所有行,而不是报错ColumnA 在TableB 中不存在
这里有一个 SQL Fiddle 证明了这一点:http://www.sqlfiddle.com/#!3/9d883/6
似乎来自TableA 的ColumnA 正在被提取,但预计它会“超出范围”。
这是为什么?
【问题讨论】:
标签: sql-server sql-server-2008 tsql correlated-subquery