我有一塊SQL(你會認爲)不會編譯,而是刪除目標表中的所有行。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小提琴在這裏惡化這個:http://www.sqlfiddle.com/#!3/9d883/6
看起來TableA
的ColumnA
正在被拿起,但預計它會「超出範圍」。
這是爲什麼?
絕對不要在你的列名前加上表名,那個人會是一些醜陋的模式,但絕對使用別名... – emalamisura