数据库简单问题,轻松拿取200分,心动不如行动!

来源:百度知道 编辑:UC知道 时间:2024/05/22 10:00:38
请看下面sale表:字段saleno(编号)和salemode(模式)
saleno salemode
0001 1
0002 2
0002 2
0003 1
0003 1
0003 2
0003 2
0004 0

查询表判断salemode中是否等于2,如果等于2,就判断此编号的其他数据中的salemode是否存在不等于2的数据,如果没有就不显示!
挂帖15天,谁的语句运行效率最高就给谁200分,大家都来试试!
不好意思!上面写错了,在此改正一下:
查询表判断salemode中是否等于2,如果等于2,就判断此编号的其他数据中的salemode是否存在不等于2的数据,如果有(上面这里是“没有”)就不显示!

我感觉自己写出来的语句运行效率不够高,所以特来求一条运行效率够高的语句!
我想要的运行过程是这样的:只有当salemode等于2的时候才查询表中有没有不等于2的数据,而不是每条都查询,因为我们这个数据库比较大。下面这是我写的: select * from sale s1 where (s1.salemode in (case when s1.salemode = '2' then(select s2.salemode from sale s2 where s2.saleno = s1.saleno)end) or s1.salemode <> '2')
求一条比这个更快的,速度一样也行,只要比我这个简洁

select * from sale s1 where (s1.salemode <> '2'or s1.salemode in (case when s1.salemode = '2' then(select s2.salemode from sale s2 where s2.saleno = s1.saleno)end))

感觉s1.salemode <> '2' 放前面应该可以提升不少效率,当判断s1.salemode <> '2' 时条件就为成立,不会在判断OR后面的条件

create #tempt(saleno numeric(10,0) NULL,
salemode numeric(10,0) NULL)
insert into #tempt(saleno,salemode)
sellect * from sale
where salemode = 2
select a.saleno,a.salemode
from sale a,#tempt b
where b.salemode <>2 and a.saleno=b.saleno
drop table #tempt
这样绝对没错,就是不知道是不是你要的答案?

SELECT *
FROM sale
WHERE (salemode = 2) AND (saleno NOT IN
(SELECT saleno
FROM sale
WHERE (salemode <> 2)))

// sy4.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#define ERROR -1
#define OK