我有一张如下表:
ID .... .... LClass UCLASS
1 .......... 1 ............ 10
2 .......... 8 ............ 20
3 .......... 21 .......... 30
如何确定ID 1和ID 2的范围重叠?我想到了:
将每个值选择到变量中,并查明它是否在任何范围之间。这很困难,因为实际的表非常大。
可能有一些sql函数来处理这个问题?
答案 0 :(得分:3)
DECLARE @Table AS TABLE (Id INT, LClass INT, UClass INT)
INSERT INTO @Table (Id, LClass, UClass)
VALUES (1,1,10),(2,8,20),(3,21,30)
SELECT *
FROm
@Table t1
INNER JOIN @Table t2
ON t1.Id <> t2.Id
AND (t1.LClass BETWEEN t2.LClass AND t2.UClass
OR t1.UClass BETWEEN t2.LClass AND t2.UClass)
使用可以在表上使用自联接并在另一个表之间搜索值。您将要排除自引用记录。