SQL语句使用Left Outer join代替In删除多条记录
使用IN语句作为删除多条记录的判断条件,除了效率低下外,还受IN集合最大个数(1000,超过此数将报错)的限制,所以,如果使用IN语句作为删除多条记录的条件有很大的隐患。为了说明该问题,定义下面两个表,作个简单的测试。
“院系表”的定义
CREATE TABLE [dbo].[dep](
[DepID] [int] IDENTITY(1,1) NOT NULL,
[Name] [char](20) NULL,
[MaxMember] [int] NULL
) ON [PRIMARY]
“学生表”的定义
CREATE TABLE [dbo].[student](
[ID] [int] IDENTITY(1,1) NOT NULL,
[DepID] [int] NULL,
[Name] [nvarchar](10) NULL,
[Age] [int] NULL
) ON [PRIMARY]
现在要把MaxMember大于50的院系表关联的所有学生表的记录删除。
使用IN的删除方式:
delete from student where ID
in(select A.ID as ID from student A left outer join dep B on A.DepID=B.DepID where B.MaxMember>50)
限制:1、效率低下
2、受IN集合最大个数为1000的限制。
解决办法:使用Left Outer Join方式:
delete A from student A left outer join dep B on A.DepID=B.DepID where B.MaxMember>50
分享到:
相关推荐
inner join、 left join 、right join、 outer join之间的区别
[t0].[Discontinued] FROM [dbo].[Products] AS [t0] LEFT OUTER JOIN [dbo].[Suppliers] AS [t1] ON [t1].[SupplierID] = [t0].[SupplierID] WHERE ([t1].[Country] = @p0) AND ([t0].[UnitsInStock] = @p1) -- @p0...
1、1=1,1=2的使用,在SQL语句组合时用的较多 “where 1=1” 是表示选择全部 “where 1=2”全部不选, 如: if @strWhere !='' begin set @strSQL = 'select count(*) as Total from [' + @tblName + '] where ' + ...
1、左连接 left join 或 left outer join 2、右连接 right join 或 right outer join 3、完全外连接 full join 或 full outer join 二、内连接 join 或 inner join 三、交叉连接 cross join 四、两表关系为一对多...
经典SQL语句大全 下列语句部分是Mssql语句,不可以在access中使用。 SQL分类: DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE) DML—数据操纵语言(SELECT,DELETE,UPDATE,INSERT) DCL—数据控制...
oracle中sql语句(+)符号代表连接 (+)在=前边为右连接 (+)在=后边为左连接 SELECT a.*, b.* from a(+) = b就是一个右连接,等同于select a.*, b.* from a right join b SELECT a.*, b.* from a = b(+)就是一个左连接...
Join on/inner join on/full join on/full outer join on/left join on/right join on/cross join on; 在使用jion时,on和where条件的区别;
1、左连接 left join 或 left outer joinSQL语句:select * from student left join course on student.ID=course.ID执行结果:左外连接包含left join左表所有行,如果左表中某行在右表没有匹配,则结果中对应行右...
10、说明:几个简单的基本的sql语句 选择:select * from table1 where 范围 插入:insert into table1(field1,field2) values(value1,value2) 删除:delete from table1 where 范围 更新:update table1 set field1...
在SQL(Structured Query Language)语言DML中,有四大语句堪称其精髓部分,分别是CASE WHEN语句,Left Outer Join | Left Join | Right Outer Join | Right Join | Inner Join语句,WITH AS语句,UNION、UNION ALL...
3.左外部联接(Left Outer Join): 17 4.投影的Let赋值(Projected let assignment): 17 5.组合键(Composite Key): 18 6.可为null/不可为null的键关系 (Nullable/Nonnullable Key Relationship): 19 LINQ to SQL...
1、1=1,1=2的使用,在SQL语句组合时用的较多 “where 1=1” 是表示选择全部 “where 1=2”全部不选, 如: if @strWhere !='' begin set @strSQL = 'select count(*) as Total from [' + @tblName + '] where ' + ...
随着计算机在社会各领域应用的深入,软件开发人员不得不面临着或多或少的数据处理、数据库访问。...下面就讲述一下其中之一, Left Outer Join | Left Join | Right Outer Join | Right Join | Inner Join 语句的用法。
1、1=1,1=2的使用,在SQL语句组合时用的较多 “where 1=1” 是表示选择全部 “where 1=2”全部不选, 如: if @strWhere !='' begin set @strSQL = 'select count(*) as Total from [' + @tblName + '] where ' +...
COMPUTE BY计算 COMPUTE计算 DATEDIFF函数计算 FORMAT格式化函数改变日期 FROM字句多表查询 GROUP BY查询销售总金额 ...left outer join查询 MID函数取位子 NOT与谓词进行组合条件查询 right outer join查询 等。。。
实现sql语句1: 代码如下:UPDATE file_manager_folder f1LEFT OUTER JOIN file_manager_folder f2 ON f1.name = f2.name AND f2.parentId = 54SET f1.parentId = 54 WHERE f2.name IS NULL AND f1.id IN (1,2,3);...
左连接 (left [outer] join) 左外连接就是将左表的所有数据分别于右表的每条数据进行连接组合,返回的结果除内连接的数据外,还有左表中不符合条件的数据,并在右表的相应列中填上null值。 SQL语句如下: select * ...
from Student left Outer join SC on Student.S#=SC.S# group by Student.S#,Sname 4、查询姓“李”的老师的个数; select count(distinct(Tname)) from Teacher where Tname like '李%'; 5、查询没学过...
实例339 利用聚合函数First或Last求数据表中第一条或最后一条记录 496 10.11 多表查询(连接查询) 498 实例340 利用FROM子句进行多表查询 498 实例341 使用表别名 499 实例342 合并多个结果集...