大大毛 的笔记

  DDM's Note

哪怕没有办法一定有说法,
就算没有鸽子一定有乌鸦,
固执无罪 梦想有价,
让他们惊讶.

posts - 14, comments - 23, trackbacks - 0, articles - 58
   :: 首页 ::  :: 联系 ::  :: 管理

查询投票的例子(向表中临时插入特征列)

Posted on 2006-08-15 18:23 大大毛 阅读(197) 评论(0)  编辑  收藏 所属分类: SQL

   问题(示例):
      投票表vote,根据条件查询 有效/失效/全部 的投票主题,是否有效的条件是将当前日期与投票的有效期进行比较
vote表结构
      示例数据:
insert into vote values ( 'topic01',dateadd(day,-2,getdate()),dateadd(day,2,getdate()) )
insert into vote values ( 'topic02',dateadd(day,-20,getdate()),dateadd(day,-10,getdate()) )
      实现效果
         有效投票为 topic01 ,无效投票为 topic02

   解决方法:
自连接查询1
   在使用自连接查询时,使用判断条件生成一个临时的子表进行自连接。利用左/右连接时子表对应列为 null 的转换从而达到在 vote 表中插入一个特征列的目的,忽略掉最后的 where 子句,手工在 select vote.* 处加入  ,isValid即可以看到效果。

   可以将SQL语句改写成下面这样,可以看得清楚一些。
自连接查询2

   也可以根据需要,改写成子查询语句:
子查询

   使用 exec vote_getAllVote 参数,即可演示效果(sqlServer2000)
   当然,生成两个临时表 validVote,invalidVote再联合查询 或者 用IF 加开关分开select也是可以的,这里就不赘述了。

   后记
      SQL语法上并没有规定解决问题只能使用一种方案,它采用了非常灵活的工作方式,因此具体使用哪一种解决方案取决于具体的应用及个人喜好。

只有注册用户登录后才能发表评论。


网站导航:
 

i am ddm