如何不按照两个字段之间的相等性来联接表

时间:2019-03-29 10:54:23

标签: sql oracle

我对SQL oracle中的查询有疑问,很高兴听到有人在这里可以帮助我。 所以,我有两个桌子。 一个包含某个内容的开始时间和结束时间(通常是很长的时间),第二个包含其他内容的开始时间和结束时间(通常是很短的时间)。我想将第二个表连接到第一个表,这样当第二个表中的时间包含在第一个表中时,第二个表中的行将连接到第一个表。 我会举一个例子:

第一张桌子:

name start end
---- ----- -----
a    10:00 12:00
b    16:00 18:00

第二张表:

name start end
---- ----- -----
c    11:30 11:45
d    16:15 17:45

因此,所需的表会将第二个表中的第二行连接到第一个表中的第二行,以及表中的第一行。

谢谢!

4 个答案:

答案 0 :(得分:1)

尝试如下

select t1.*,t2.* from table1 t1 join table2 t2
on t1.start<=t2.start and t1.end>=t2.end

答案 1 :(得分:1)

您可以在联接的'ON'子句中使用以下表达式。

... ON(table1.start <= table2.start AND table1.end> = table2.end)。

答案 2 :(得分:1)

假设表1中的时间间隔不重叠,

Select *
From Table1 a
INNER JOIN Table2 b 
on b.start between a.start and a.end

答案 3 :(得分:0)

如果我答对了,则必须完全包括第二个表中的行范围:

      SELECT *
        FROM Table_A A
  INNER JOIN Table_B B
          ON B.start BETWEEN A.start AND a.end
         AND B.end   BETWEEN A.start AND a.end