在 SQL 连接中创建具有重叠日期范围的行。

3
我有两个表格如下:
TableA
ID 链接1 链接2 开始日期 结束日期
99 H J 1999-01-01 2005-01-01
TableB
ID 链接1 链接2 开始日期 结束日期
99 X Y 2002-01-01 2008-01-01
我想查询它们,得到以下结果:
ID A.链接1 A.链接2 B.链接1 B.链接2 开始日期 结束日期
99 H J 1999-01-01 2002-01-01
99 H J X Y 2002-01-02 2005-01-01
99 X Y 2005-01-02 2008-01-01
看起来我应该可以使用SQL通过一些联接和并集操作来实现,但我无法完全理解。请问有谁能告诉我如何产生这个结果吗?谢谢。

欢迎来到Stackoverflow。请确保标记您正在使用的数据库,以获得最准确的答案。 - django-unchained
1个回答

0
这是一个关于PostGreSQL的解决方案:
SELECT a."id",
       a."link1",
       a."link2",
       NULL          AS link1,
       NULL          AS link2,
       a."date_from",
       b."date_from" AS DATE_TO
FROM   tab1 a
       left join tab2 b
              ON a."id" = b."id"
UNION ALL
SELECT a."id",
       a."link1",
       a."link2",
       b."link1",
       b."link2",
       b."date_from" + 1,
       a."date_to"
FROM   tab1 a
       join tab2 b
         ON a."id" = b."id"
UNION ALL
SELECT a."id",
       NULL            AS link1,
       NULL            AS link2,
       b."link1",
       b."link2",
       b."date_to" + 1 AS DATE_FROM,
       a."date_to"
FROM   tab2 a
       left join tab1 b
              ON a."id" = b."id"; 

这里是SQL Fiddle带有输出结果的网址。


你的SQL示例并不完全符合原帖中所期望的结果。 - Tanguy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接