找到与同一表中的其他人重叠的所有条目的最有效方法是什么?每个条目都有一个开始和结束日期。例如,我有以下数据库设置:在SQL表中查找高效的重叠条目
CREATE TABLE DEMO
(
DEMO_ID int IDENTITY ,
START date NOT NULL ,
END date NOT NULL
);
INSERT INTO DEMO (DEMO_ID, START, END) VALUES (1, '20100201', '20100205');
INSERT INTO DEMO (DEMO_ID, START, END) VALUES (2, '20100202', '20100204');
INSERT INTO DEMO (DEMO_ID, START, END) VALUES (3, '20100204', '20100208');
INSERT INTO DEMO (DEMO_ID, START, END) VALUES (4, '20100206', '20100211');
我的查询看起来如下:
SELECT DISTINCT *
FROM DEMO A, DEMO B
WHERE A.DEMO_ID != B.DEMO_ID
AND A.START < B.END
AND B.START < A.END
问题是,当我的演示表有例如20'000行查询时间太长。我的环境是MS SQL Server 2008的 感谢任何更有效的解决方案
添加索引开始/结束列。 – bobince 2010-06-02 11:53:33
我认为你还应该使用A.DEMO_ID
Thierry
2010-06-02 12:00:37