有没有更好的方法在 sybase 中编写这个 SQL 查询?
Is there a better way to write this SQL query in sybase?
我有一个包含以下查询的存储过程。基于 @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)
)
你可以做的是至少使用简单的布尔逻辑重新组合术语
SELECT TOP 1 *
FROM
MyTable
WHERE
ID1 = @Id1 and Id1Type = @Id1Type and
(@range < 2 or ID2 = @Id2 and ID2Type = @Id2Type) and
(@range < 3 or ID3 = @Id3 and ID3Type = @Id3Type) and
(@range < 4 or ID4 = @Id4 and ID4Type = @Id4Type) and
(@range < 5 or ID5 = @Id5 and ID5Type = @Id5Type)
我有一个包含以下查询的存储过程。基于 @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)
)
你可以做的是至少使用简单的布尔逻辑重新组合术语
SELECT TOP 1 *
FROM
MyTable
WHERE
ID1 = @Id1 and Id1Type = @Id1Type and
(@range < 2 or ID2 = @Id2 and ID2Type = @Id2Type) and
(@range < 3 or ID3 = @Id3 and ID3Type = @Id3Type) and
(@range < 4 or ID4 = @Id4 and ID4Type = @Id4Type) and
(@range < 5 or ID5 = @Id5 and ID5Type = @Id5Type)