我有一段 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;
上面的 delete 语句会导致从 中删除所有行TableA
,而不是在ColumnA
中不存在的错误TableB
这里有一个 SQL Fiddle 证明了这一点:http ://www.sqlfiddle.com/#!3/9d883/6
似乎正在接收ColumnA
来自,但预计它会“超出范围”。TableA
为什么是这样?