+ -
当前位置:首页 → 问答吧 → 存储过程的问题!

存储过程的问题!

时间:2011-12-12

来源:互联网

SQL code
SELECT a.emailID ,a.sentTime,a.subject,a.toDisplayName,a.body 
    FROM MailInfoDB.dbo.WaitingEmailLists a
    where  DateDiff(DD,sentTime,GetDate())=0
    
    SELECT ea.emailID ,ea.toAddress
    FROM MailInfoDB.dbo.EmailAddressLists ea 
    WHERE ea.emailID in (SELECT we.emailID   FROM MailInfoDB.dbo.WaitingEmailLists we where DateDiff(DD,sentTime,GetDate())=0)


自己写的一个存储过程包含两个查询  
能在一个查询里就查出这么多数据吗?

其实就是两个表 一个主表 一个子表 通过外键引用的

作者: bios8086   发布时间: 2011-12-12

一个查询的话要求列数和对应类型一致,你这两个查询的列数都不一致。

如果一致的话可以用UNION ALL把两个查询结果合并。

作者: guguda2008   发布时间: 2011-12-12

不知道你需要得到什么结果呢??
如果是单独的两个结果集合并 就用UNION ALL

但是字段需要一一对应

作者: fredrickhu   发布时间: 2011-12-12

SQL code
SELECT a.emailID ,a.sentTime,a.subject,a.toDisplayName,a.body 
   ,ea.emailID ,ea.toAddress
FROM MailInfoDB.dbo.WaitingEmailLists a,MailInfoDB.dbo.EmailAddressLists ea 
where  ea.emailID  = a.emailID 
AND A.sentTime >= CONVERT(VARCHAR(10),GetDate(),120)
AND A.sentTime < CONVERT(VARCHAR(10),DATEADD(DAY,1,GetDate()),120)

作者: Haiwer   发布时间: 2011-12-12

引用 1 楼 guguda2008 的回复:

一个查询的话要求列数和对应类型一致,你这两个查询的列数都不一致。

如果一致的话可以用UNION ALL把两个查询结果合并。


合并是不是有重复数据的

作者: bios8086   发布时间: 2011-12-12

引用 4 楼 bios8086 的回复:

引用 1 楼 guguda2008 的回复:

一个查询的话要求列数和对应类型一致,你这两个查询的列数都不一致。

如果一致的话可以用UNION ALL把两个查询结果合并。


合并是不是有重复数据的

UNION ALL不去重复但比较快,UNION 去重复但比较慢。

作者: guguda2008   发布时间: 2011-12-12

DateDiff(DD,sentTime,GetDate())=0

-->

AND A.sentTime >= CONVERT(VARCHAR(10),GetDate(),120)
AND A.sentTime < CONVERT(VARCHAR(10),DATEADD(DAY,1,GetDate()),120)

完全出于性能优化习惯,与你所问无关

作者: Haiwer   发布时间: 2011-12-12

我也不太清楚怎么回事,感觉是数据重复啊

作者: zenmezhemeduo   发布时间: 2011-12-12

引用 7 楼 zenmezhemeduo 的回复:
我也不太清楚怎么回事,感觉是数据重复啊

想去重复就用union

作者: pengxuan   发布时间: 2011-12-12

引用 8 楼 pengxuan 的回复:

引用 7 楼 zenmezhemeduo 的回复:
我也不太清楚怎么回事,感觉是数据重复啊

想去重复就用union

是一对多的关系 将两个表连接 能去重复吗?

作者: bios8086   发布时间: 2011-12-12

引用 6 楼 haiwer 的回复:

DateDiff(DD,sentTime,GetDate())=0

-->

AND A.sentTime >= CONVERT(VARCHAR(10),GetDate(),120)
AND A.sentTime < CONVERT(VARCHAR(10),DATEADD(DAY,1,GetDate()),120)

完全出于性能优化习惯,与你所问无关

谢谢你的改进建议!很感谢,但是我不知为什么使用函数没你这个性能好呢?

作者: bios8086   发布时间: 2011-12-12