[英]how to join tables not according to equality between two fields
我在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
因此,所需的表将第二个表中的第二行连接到第一个中的第二行,并且类似于表中的第一行。
谢谢!
尝试如下
select t1.*,t2.* from table1 t1 join table2 t2
on t1.start<=t2.start and t1.end>=t2.end
您可以在联接中的“ON”子句中使用以下表达式。
... ON(table1.start <= table2.start AND table1.end> = table2.end)。
假设你在table1中的时间间隔不重叠,这样做,
Select *
From Table1 a
INNER JOIN Table2 b
on b.start between a.start and a.end
如果我说得对,第二个表中的行范围必须完全包括在内:
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.