在表上查找范围重叠SQL

时间:2016-06-14 16:52:30

标签: sql sql-server sql-server-2008

我有一张如下表:

  

ID .... .... LClass UCLASS

     

1 .......... 1 ............ 10

     

2 .......... 8 ............ 20

     

3 .......... 21 .......... 30

如何确定ID 1和ID 2的范围重叠?我想到了:

  1. 将每个值选择到变量中,并查明它是否在任何范围之间。这很困难,因为实际的表非常大。

  2. 可能有一些sql函数来处理这个问题?

1 个答案:

答案 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)

使用可以在表上使用自联接并在另一个表之间搜索值。您将要排除自引用记录。