子查询引发的血案

来源:互联网 发布:hp网络打印机 编辑:程序博客网 时间:2024/06/14 22:38

参考:点击打开链接

以下是本人的实例:

USE tempdbGOIF OBJECT_ID('a') IS NOT NULL DROP TABLE aIF OBJECT_ID('b') IS NOT NULL DROP TABLE bCREATE TABLE a(id INT)CREATE TABLE b(id2 INT)INSERT INTO a VALUES (1)INSERT INTO a VALUES (2)INSERT INTO b VALUES (1) --注:b 表没有 id 字段,但以下的删除不会出错!--如果 b 表无任何记录,a 表不会删除任何记录--如果 b 表有记录,    a 表会删除所有记录DELETE FROM a WHERE id IN (SELECT id FROM b)SELECT COUNT(1) FROM a/*0*/--正确的做法:子查询中的字段必须加上表名或别名DELETE FROM a WHERE a.id IN (SELECT b.id FROM b)/*消息 207,级别 16,状态 1,第 20 行列名 'id' 无效。*/