0

私はかなり単純で自明なSQL文を持っています:

ALTER PROCEDURE [dbo].[sp_getAllDebatesForAlias](@SubjectAlias nchar(30))
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    -- Insert statements for procedure here
    SELECT *
    FROM tblDebates
    WHERE (SubjectID1 in (SELECT SubjectID FROM tblSubjectAlias WHERE SubjectAlias = @SubjectAlias)) 
        OR (SubjectID2 in (SELECT SubjectID FROM tblSubjectAlias WHERE SubjectAlias = @SubjectAlias)) ;
END

このステートメントをより効率的にする方法があると確信しています。少なくとも、inセクションで同じテーブルを複数作成することを取り除きます。つまり、

SELECT SubjectID FROM tblSubjectAlias WHERE SubjectAlias = @SubjectAlias

部。

何か案は?

4

2 に答える 2

1

試す:

select d.* from tblDebates d
where exists
(select 1
 from tblSubjectAlias s
 where s.SubjectID in (d.SubjectID1, d.SubjectID2) and
       s.SubjectAlias = @SubjectAlias)
于 2012-11-21T13:00:12.963 に答える
1
SELECT d.*
FROM tblDebates d
inner join tblSubjectAlias s on s.SubjectID in (d.SubjectID1, d.SubjectID2)
where s.SubjectAlias = @SubjectAlias
于 2012-11-21T12:53:33.703 に答える