有没有更好的方法在sybase中编写此SQL查询?

有没有更好的方法在sybase中编写此SQL查询?,sql,sybase,Sql,Sybase,我有一个包含以下查询的存储过程。基于@range参数,我将向where子句添加更多条件。下面的查询给出了正确的结果。我想知道,随着范围的增加,是否可以避免重复前面的“Idx”、“IdxType”。是否有更好的方法编写此查询 SELECT TOP 1 * FROM MyTable WHERE ID1 = @Id1 and Id1Type = @Id1Type and ( (@range = 2 and ID2 =

我有一个包含以下查询的存储过程。基于@range参数,我将向where子句添加更多条件。下面的查询给出了正确的结果。我想知道,随着范围的增加,是否可以避免重复前面的“Idx”、“IdxType”。是否有更好的方法编写此查询

 SELECT TOP 1 *
    FROM 
        MyTable
    WHERE
    ID1 = @Id1
    and Id1Type = @Id1Type
    and 
    (
        (@range = 2 and ID2 = @Id2 and ID2Type = @Id2Type)
         or
        (@range = 3 and ID2 = @Id2 and ID2Type = @Id2Type 
            and ID3 = @Id3 and ID3Type = @Id3Type)
        or
        (@range = 4 and ID2 = Id2 and ID2Type = @Id2Type 
          and ID3 = @Id3 and ID3Type = @Id3Type
          and ID4 = @Id4 and ID4Type = @Id4Type)
        or
        (@range = 5 and ID2 = @Id2 and ID2Type = @Id2Type 
          and ID3 = @Id3 and ID3Type = @Id3Type
          and ID4 = @Id4 and ID4Type = @Id4Type
           and ID5 = @Id5 and ID5Type = @Id5Type)
    )

您可以做的是至少使用简单的布尔逻辑重新组合术语

选择前1名*
从…起
我的桌子
哪里
ID1=@ID1和Id1Type=@Id1Type和
(@range<2或ID2=@ID2和ID2Type=@ID2Type)和
(@range<3或ID3=@ID3和ID3Type=@ID3Type)和
(@range<4或ID4=@ID4和ID4Type=@ID4Type)和
(@range<5或ID5=@ID5和ID5Type=@ID5Type)

老实说,当您决定单独存储
ID1
ID2
等列时,您已经走错了方向。关系数据库是为不同的数据结构设计的