我有一张这样的表
ID Day Start End
----------- ---- ----- -----
1 M 7:30 9:30
2 T 7:30 11:30
3 T 12:30 14:30
另一张像这样的表
Day Start End
---- ----- -----
M 8:30 11:30
T 8:30 10:30
我想从第一个表中选择所有基于第二个表的记录。
示例结果:
ID Day Start End
----------- ---- ----- -----
1 M 7:30 9:30
2 T 7:30 11:30
结果是这样的,因为第一个表中的前两个记录与第二个表中的标准匹配。第1排和第2排在同一天,时间与另一排发生冲突。
答案 0 :(得分:1)
此联接将起作用:
select *
from t1
join t2 on t1.day = t2.day and t1.end >= t2.start and t1.start <= t2.end
如果时间列为varchars
,则需要转换为time
:
select *
from t1
join t2 on t1.day = t2.day and
cast(t1.end as time) >= cast(t2.start as time) and
cast(t1.start as time) <= cast(t2.end as time)