Sql查询中的澄清

Sql查询中的澄清,sql,oracle,sybase,Sql,Oracle,Sybase,我有一个澄清,就是我想质疑的方式 我想得到在特定时间范围内的记录 我在表a中有一条记录,其开始时间为1900-01-01 21:00:00.0,结束时间为1900-01-01 22:00:00.0 我还有另一个表B,它的开始时间为1900-01-01 21:47:43.0,结束时间为1900-01-01 21:47:48.0 现在,我的任务是查找表A中的所有条目,其中包含表B的开始时间和结束时间 最初我使用的查询如下: select * from A where startTime betwee

我有一个澄清,就是我想质疑的方式

我想得到在特定时间范围内的记录

我在表a中有一条记录,其开始时间为1900-01-01 21:00:00.0,结束时间为1900-01-01 22:00:00.0

我还有另一个表B,它的开始时间为1900-01-01 21:47:43.0,结束时间为1900-01-01 21:47:48.0

现在,我的任务是查找表A中的所有条目,其中包含表B的开始时间和结束时间

最初我使用的查询如下:

select *
from A
where startTime between '1900-01-01 21:47:43.0' and '1900-01-01 21:47:48.0'
我没有得到任何结果

然后我尝试了以下查询

select *
from A
where startTime < '1900-01-01 21:47:43.0' and startTime > '1900-01-01 21:47:48.0'
等等

在表B中,我有行开始时间和结束时间,如

1900-01-01 21:27:30.0 - 1900-01-01 21:27:55.0
1900-01-01 22:11:22.0 - 1900-01-01 22:11:44.0
1900-01-01 23:22:11.0 - 1900-01-01 23:22:55.0
.
.
.
and so on.
我必须从表B中获取开始时间和结束时间,并匹配表A中的插槽,然后得到结果

那么,我的第一种查询方式是正确的,还是第二种查询方式是正确的,或者是否有其他方法可以做到这一点

编辑

由于我们试图查找表A中存在范围的记录,因此我尝试使用B的开始时间和结束时间,如下所示:

select *
    from A
        and '1900-01-01 21:47:43.0' between startTime and endTime
        and '1900-01-01 21:47:48.0' between startTime and endTime

我认为最简单的方法是使用BETWEEN连接表

SELECT A.*
FROM A
JOIN B
ON b.start_time BETWEEN a.start_time AND a.end_time
AND b.end_time BETWEEN a.start_time AND a.end_time
这将返回来自A的所有内容,其中来自B的开始时间和结束时间都由A中的一个范围封装

您的第二个查询看起来不太正确,因为您正在比较双方的开始时间,但该想法与此类似:

SELECT A.*
FROM A
JOIN B
ON a.start_time < b.start_time
AND a.end_time > b.end_time
选择一个*
从
加入B
在a.开始时间b.结束时间

任何一个查询都应该返回A中的范围,该范围封装了B中的开始-结束时间。

这取决于您希望结果是什么,您希望两个表之间的开始和结束时间匹配吗?或者您想在B中查找表A范围内的记录?@Goat_CO:我想要表A中的所有记录,这些记录封装了表B中记录的开始时间和结束时间。在这种情况下,我该怎么办?这很令人困惑,因为在问题的顶部,您显示的A值与值不同对于底部的A和顶部的B的值,它们与底部的B的值不同。@Goat_co:很抱歉,我把这些值弄混了。我已经更正了这些值。那么,我如何找到表A中的所有记录,这些记录封装了表B中记录的开始时间和结束时间。在这种情况下,我应该怎么做。谢谢您的回复。这里,您的第二个查询返回一行,但您加入两个表的第一个查询没有返回行。这里,您的第二个查询返回一行,但您加入两个表的第一个查询没有返回行,因为A的开始时间
1900-01-01 21:00:00
不会在
1900-01-01 21:47:43.0
和之间发生
1900-01-01 21:47:48.0
和A的结束时间
1900-01-01
1900-01-01 21:47:43.0
1900-01-01 21:47:48.0
之间不会出现。那么如何更正第一个查询。A是包含范围的表,对吗?第一个查询表示b的开始时间必须在A的范围内,b的结束时间必须在A的范围内,完全封装。如果范围在A中,则应正常工作。是A是带有范围的表格。因为我们试图在表A中找到存在范围的记录,所以我尝试使用B的开始时间和结束时间,并编辑了包含新查询的问题。你能检查一下它是否一致吗。我想你的第二个问题和我编辑的新问题是一样的。
SELECT A.*
FROM A
JOIN B
ON a.start_time < b.start_time
AND a.end_time > b.end_time