首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

麻烦帮小弟我看看这个语句

2012-08-27 
麻烦帮我看看这个语句语句1:SELECT TOP 6 *,(SELECT C.ClassName FROM [shop_Class] C WHERE C.ClassIDsh

麻烦帮我看看这个语句

语句1:
SELECT TOP 6 *,(SELECT C.ClassName FROM [shop_Class] C WHERE C.ClassID=shop_Product.ClassID) as ClassName FROM [shop_Product] WHERE isPassed=1 AND isSale=1 AND ((DATEDIFF(dd,BeginTime,'2012-8-8 11:17:26')>=0 AND DATEDIFF(dd,EndTime,'2012-8-8 11:17:26')<0) OR ValidDay=0)

语句2:
select top 6 a.*,b.ClassName from shop_Class b,shop_Product a where a.ClassId=b.ClassId and isPassed=1 AND isSale=1 AND ((DATEDIFF(dd,BeginTime,'2012-8-8 11:17:26')>=0 AND DATEDIFF(dd,EndTime,'2012-8-8 11:17:26')<0) OR ValidDay=0)

我一般采用语句2的方式,我看好多使用了语句1的方式,请问下语句1的方式是不是效率高些?

如果采用语句一,在不改变结构的情况下。如何只显示 shop_Class.enabled=1的记录?

[解决办法]
选中语句,查看执行计划,有索引的条件下建议用方法2效率高


(DATEDIFF(dd,BeginTime,'2012-8-8 11:17:26')>=0这条件要改为不用函数
楼主这条件是否有误

条件去掉时分秒后应该直接用between 就行了吧
[解决办法]
如下

SQL code
((DATEDIFF(dd,BeginTime,'2012-8-8 11:17:26')>=0 AND DATEDIFF(dd,EndTime,'2012-8-8 11:17:26')<0) OR ValidDay=0)改为(BeginTime<='2012-8-8' AND EndTime>='2012-8-8'  OR ValidDay=0)
[解决办法]
如何只显示 shop_Class.enabled=1的记录?

where后面再加上

and exists(select 1 from [shop_Class] d where d.ClassId=shop_Product.ClassID and d.enabled=1)
[解决办法]
请问下语句1的方式是不是效率高些?

除非ClassID上有索引,并且top(n) 的n很小,否则这种写法的效率很差。
[解决办法]
一的语句难看死了。还是用二 INNER JOIN这种写法更好看些

热点排行