SQL不等式连接返回的笛卡尔积

SQL不等式连接返回的笛卡尔积,sql,inner-join,cartesian-product,netezza,Sql,Inner Join,Cartesian Product,Netezza,我在获取联接条件以隔离唯一记录时遇到问题。我的查询返回笛卡尔积,我不知道如何停止。我的桌子是这样的: Table A ID_1 Start End Name 137 1:00 2:00 Galia 137 2:00 3:00 Est 137 3:00 4:00 Omnia 137 4:00 5:00 Divisa 137 5:00 6:00 Partes 137 6:00 7:00 Tres 13

我在获取联接条件以隔离唯一记录时遇到问题。我的查询返回笛卡尔积,我不知道如何停止。我的桌子是这样的:

Table A         
ID_1    Start   End Name
137 1:00    2:00    Galia
137 2:00    3:00    Est
137 3:00    4:00    Omnia
137 4:00    5:00    Divisa
137 5:00    6:00    Partes
137 6:00    7:00    Tres
137 7:00    8:00    Quarum
137 8:00    9:00    Unam
137 9:00    10:00   Incolunt

Table B     
ID_1Time_1  Time_2
137 3:10    3:57
ID_1Start   End Name    Time_1  Time_2
137 1:00    2:00    Galia   3:10    3:57
137 2:00    3:00    Est 3:10    3:57
137 3:00    4:00    Omnia   3:10    3:57
137 4:00    5:00    Divisa  3:10    3:57
137 5:00    6:00    Partes  3:10    3:57
137 6:00    7:00    Tres    3:10    3:57
137 7:00    8:00    Quarum  3:10    3:57
137 8:00    9:00    Unam    3:10    3:57
137 9:00    10:00   Incolunt3:10    3:57
ID_1Start   End Name    Time_1  Time_2
137 3:00    4:00    Omnia   3:10    3:57
我的问题是:

select A.*, B.Time_1, B.Time_2
from Table_A A
inner join
Table_B B
on 
A.ID_1 = B.ID_1 and B.Time_1<=A.End and B.Time_2 >= A.Start
看起来它给出了两个表的笛卡尔积,考虑到每个记录都满足所有三个条件,这是有意义的。我想要的只是返回时间对应的记录,如下所示:

Table A         
ID_1    Start   End Name
137 1:00    2:00    Galia
137 2:00    3:00    Est
137 3:00    4:00    Omnia
137 4:00    5:00    Divisa
137 5:00    6:00    Partes
137 6:00    7:00    Tres
137 7:00    8:00    Quarum
137 8:00    9:00    Unam
137 9:00    10:00   Incolunt

Table B     
ID_1Time_1  Time_2
137 3:10    3:57
ID_1Start   End Name    Time_1  Time_2
137 1:00    2:00    Galia   3:10    3:57
137 2:00    3:00    Est 3:10    3:57
137 3:00    4:00    Omnia   3:10    3:57
137 4:00    5:00    Divisa  3:10    3:57
137 5:00    6:00    Partes  3:10    3:57
137 6:00    7:00    Tres    3:10    3:57
137 7:00    8:00    Quarum  3:10    3:57
137 8:00    9:00    Unam    3:10    3:57
137 9:00    10:00   Incolunt3:10    3:57
ID_1Start   End Name    Time_1  Time_2
137 3:00    4:00    Omnia   3:10    3:57

关于如何构造联接以实现这一点,有什么建议吗?我正在开发一个Netezza盒子,如果这对可用的功能有帮助的话。谢谢。

您希望应用以下条件:

    A.Start <= B.Time_1 <= B.Time_2 <= A.End

A.开始这些时间的数据类型是什么?
3:57>=9:00
正确吗?@TomR。有了提供的数据,您的查询应该可以正常工作(即返回一行)。您确定包含了正确的查询和示例数据吗?这不是笛卡尔产品。这不是实际数据,这是我无法发布的专有公司数据。但这些数据代表了这个问题。它在中是笛卡尔积,因为查询似乎在测试表中的任何位置是否满足不等式连接,然后返回ID匹配的任何记录,从而给出ID和名称的笛卡尔积。无论不等式是在join子句中还是在where子句中,它都返回多行。谢谢,我希望您不介意我用一些解释扩展您的答案。
select A.*, B.Time_1, B.Time_2
from Table_A A
inner join
Table_B B
on 
A.ID_1 = B.ID_1 and B.Time_1>=A.Start and B.Time_2 <= A.End