我有一个关于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的运行示例。