在SQL中查询到不相关表的数据



我有一个关于SQL的问题。让我们创建一个包含两个表的简化示例:

表A包含一个周期的名称,开始日期一个其结束日期

表B包含日期

我想做的是做一个查询,其中我使用表B的日期,并在另一列中显示周期。逻辑上,我会使用像

这样的条件表B.date <=表A.enddateAND表B.date>=表A.startdate

获取周期的名称,所讨论的日期所属。然而,正如我不能retate这两个表如表在关系数据库通常,我目前无法摆脱这个问题。

在关系数据库中您通常会看到" equity -join "使用相等谓词关联表

但是,您并不局限于这些简单的谓词。您可以使用任何谓词你想把表格联系起来。这些通常被称为"theta join"。

你可以这样做:

select a.*, b.*
from table_a a
join table_b b on b.date >= a.startdate and b.date <= a.enddate

样本数据:

create table table_a (name varchar(10), startdate date, enddate date);
insert into table_a (name, startdate, enddate) values
('Q1', '2021-01-01', '2021-03-31'),
('Q2', '2021-04-01', '2021-06-30'),
('Q3', '2021-07-01', '2021-09-30'),
('Q4', '2021-10-01', '2021-12-31');

create table table_b (date date);
insert into table_b (date) values ('2021-05-21'), ('2021-09-07');

结果:

name  startdate   enddate     date      
----- ----------  ----------  ----------
Q2    2021-04-01  2021-06-30  2021-05-21
Q3    2021-07-01  2021-09-30  2021-09-07

参见DB Fiddle的运行示例。

相关内容

  • 没有找到相关文章