求一条SQL语句

liy116 2011-03-21 10:53:38
问题是这样的。

SELECT * FROM View_RESVT WHERE ((WO ='1102027') OR (JOBNO ='1102027')) and 1=1 and PRODLOC='X' order by CODE

这是在一个条件1102027下进行查询如果我需要多个呢 我要查1102024,1102021还有1102027一起的呢?


SELECT * FROM View_RESVT WHERE ((WO in ('1102027','1102024','1102021')) OR (JOBNO in ('1102027','1102024','1102021'))) and 1=1 and PRODLOC='X' order by CODE

这样可以查但是我不确定它查询的条件,查询的条件数量不确定呢?应该怎么查?

SELECT * FROM View_RESVT WHERE ((WO in ('1102027','','')) OR (JOBNO in ('1102027','',''))) and 1=1 and PRODLOC='X' order by CODE

这样的话他查询出来的数据不对
...全文
71 点赞 收藏 13
写回复
13 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
liy116 2011-03-21
SELECT * FROM View_RESVT  WHERE (WO ='1102027' OR JOBNO ='1102027') and  1=1 and PRODLOC='X' ORDER BY CODE,WO

这样很快2秒就出来了
回复
liy116 2011-03-21
本来这些数据就是在很多个表里面查找出来的已经占用了很多了,
回复
Mr_Nice 2011-03-21
[Quote=引用楼主 liy116 的回复:]
问题是这样的。
SQL code

SELECT * FROM View_RESVT WHERE ((WO ='1102027') OR (JOBNO ='1102027')) and 1=1 and PRODLOC='X' order by CODE

这是在一个条件1102027下进行查询如果我需要多个呢 我要查1102024,1102021还有1102027一起的呢?

SQ……
[/Quote]

查询条件不确定的情况,用拼 sql 的方式处理?

--@i,@j 拼成你想要的条件

@sql = 'select * from view_resvt where ((wo = @i) or (jobno = @j)) and 1= 1 and prodloc =''X'''
exec (@sql)

回复
快溜 2011-03-21
[Quote=引用 4 楼 liy116 的回复:]
引用 2 楼 wwwwgou 的回复:
SQL code
DECLARE @str1 VARCHAR(MAX)
SET @str1 = ',1102027,1102024,1102021,'

SELECT *
FROM View_RESVT
WHERE (CHARINDEX(',' + WO + ',', @str1) > 0 OR CHARINDEX(',' + JOBNO + ……
[/Quote]效率问题,你这样写一点办法都没有,索引都用不到
回复
快溜 2011-03-21
[Quote=引用 3 楼 liy116 的回复:]
SQL code
SELECT * FROM View_RESVT WHERE CHARINDEX('1102027',(WO,JOBNO))>0

这样吗 ?不对啊 charindex()里面好像只支持一个字段啊
[/Quote]看2楼
回复
liy116 2011-03-21
[Quote=引用 2 楼 wwwwgou 的回复:]
SQL code
DECLARE @str1 VARCHAR(MAX)
SET @str1 = ',1102027,1102024,1102021,'

SELECT *
FROM View_RESVT
WHERE (CHARINDEX(',' + WO + ',', @str1) > 0 OR CHARINDEX(',' + JOBNO + ',', @str1) > 0)
……
[/Quote]
这个我也试了一下,可以实现就是查询时间有点长。。。。。
一个数据查询时间是36秒
回复
liy116 2011-03-21
SELECT * FROM View_RESVT WHERE CHARINDEX('1102027',(WO,JOBNO))>0

这样吗 ?不对啊 charindex()里面好像只支持一个字段啊
回复
Shawn 2011-03-21
DECLARE @str1 VARCHAR(MAX)
SET @str1 = ',1102027,1102024,1102021,'

SELECT *
FROM View_RESVT
WHERE (CHARINDEX(',' + WO + ',', @str1) > 0 OR CHARINDEX(',' + JOBNO + ',', @str1) > 0)
AND 1 = 1
AND PRODLOC = 'X'
ORDER BY CODE
回复
Xiao_Ai_Mei 2011-03-21
charindex()
回复
sysuleiw 2011-03-21
楼主如果实在怕效率差并且数据量很大可以参考下execute 和exec sp_execute这两者的比较,效率上后者要好一点
回复
sysuleiw 2011-03-21
楼主试一试7楼的字符串拼接,动态查询可以满足你的不确定情况。。
回复
Xiao_Ai_Mei 2011-03-21
想办法存储到表里,然后连接
回复
liy116 2011-03-21
还有别的方法嘛?
回复
相关推荐
发帖
疑难问题
创建于2007-09-28

2.1w+

社区成员

MS-SQL Server 疑难问题
申请成为版主
帖子事件
创建了帖子
2011-03-21 10:53
社区公告
暂无公告