SQL Select语句在哪里

杰西·海梅(Jesse Jaime)

我有一个事件表,其中有一个作者字段和一个演示者字段。我的人员表中的人员可以是同一事件的作者和演示者,也可以是演示者或作者。我需要根据他们的人员ID和他们选择的类型或过滤器将过滤器应用于结果集。我的筛选器是:

全部:这将返回其中它们是作者或演示者的所有记录。

AllPresenter:作为演示者的所有记录。

AllAuthor:所有记录为作者。

PresenterOnly:仅记录为演示者,而非作者。

AuthorOnly:仅记录为作者而不是演示者。

PresenterAndAuthorOnly:演示者和作者的所有记录。

我目前有一个存储过程,该过程使用外部if(例如下面的示例),并且我试图找到一种方法将所有这些类似的select语句组合为一个。我没有太大的运气找到更好的解决方案,我想知道我是否缺少一种技术。

If (@filter = 'PandAOnly' or @filter = 'AllP' or @filter = 'AllA')
begin
    Select * from Event 
    Where 
        PresenterId = Case @personId is null then PresenterId else @personId end
        and 
        AuthorId = Case @personId  is null then AuthorId else @personId end
end
else if (@filter = 'All')
begin
    Select * from Event
    Where
        PresenterId = @personId 
        Or
        AuthorId = @personId 
end
else if (@fitler = 'POnly')
begin
   Select * from Event
   Where 
       PresenterId = @personId 
       and
       AuthorId <> @personId 
end
else
begin
    Select * from Event
    Where 
        AuthorId = @personId 
        and 
        PresenterId <> @personId 
end
马里
Select * from Event 
Where 
   (
        ((@personId is null) OR (PresenterId =@personId ))
        and 
        ((@personId  is null) OR (AuthorId = @personId))
        AND 
        (@filter = 'PandAOnly' or @filter = 'AllP' or @filter = 'AllA')
    )
OR 
  (
       (PresenterId = @personId 
        Or
        AuthorId = @personId )
    AND (@filter = 'All')
  )
OR 
  (
       PresenterId = @personId 
       and
       AuthorId <> @personId 
       and 
       @fitler = 'POnly'
  )
OR 
 (
        AuthorId = @personId 
        and 
        PresenterId <> @personId 
       and 
       @fitler = 'AOnly'
 )

笔记

我宁愿坚持使用存储过程,上述查询的执行计划会很恐怖:)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章