sql中带in条件的查询及提高效率


本文摘自博客园-曾祥展,原文地址:https://www.cnblogs.com/zengxiangzhan/archive/2010/01/03/1638152.html,侵删。

ALTER PROCEDURE [dbo].[example1]
(
@booker varchar(100)
)
AS
declare @str varchar(1000) 
set @str='select * from tb_itregister where booker in(' + @booker + ')'
execute (@str)

调用:
string booker = "a,b";
        booker = booker.Replace(",", "','");
        booker = "'" + booker + "'";



 

/************************************************************
     问题描述: id值可能有数千个之多,怎么提高效率?
     例子:select * from table1 where id in (1,3,6,10,...,8000) and type = 1
 ************************************************************/

 --例如:
    SELECT *
    FROM   tb
    WHERE  id IN (1, 2, 3, 4, ........)
           AND NAME = 'best'    
     
 --1.将括号的条件做成变量
    DECLARE @str VARCHAR(4000) 
    SET @str = '1,2,3,4,5.......'
     
 --2.然后将@s拆分后插入临时表
    CREATE TABLE #t
    (
        id VARCHAR(10)
    ) 
    DECLARE @i    INT 
    DECLARE @len  INT 
    SET @i = 1 
    WHILE @i < LEN(@str + ',')
    BEGIN
        INSERT #t
        SELECT SUBSTRING(@str + ',', @i, CHARINDEX(',', @str + ',', @i) -@i)
        
        SET @i = CHARINDEX(',', @str + ',', @i) + 1
    END 

 --3利用临时表和原表进行连接取值
    SELECT k.* 
    FROM   tb k
           INNER JOIN #t p
                ON  p.id = k.id
    WHERE  NAME = 'best'   

相关阅读 >>

sql server是什么,能干什么

查看表结构的sql指令是什么

mysql运行sql文件时出现问题怎么办

分析mongodb和mysql各自的关键特性、差别和优势

sql是什么?

sql语句中union的用法与踩坑记录

sql优化的n种方法(小结)

jsp怎么连接sql数据库?

深入分析mssql数据库中事务隔离级别和锁机制

三十分钟mysql快速入门(图解)

更多相关阅读请进入《sql》频道 >>


数据库系统概念 第6版
书籍

数据库系统概念 第6版

机械工业出版社

本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...