从 SQL 中的不相关表中查询数据

Querying data from to nonrelated tables in SQL

我有一个关于 SQL 的问题。让我们用两个 tables 组成一个简化的例子:

Table A 包含句点的 名称开始日期结束日期

Table B 包含 日期

我想做的是进行查询,我在其中使用 Table B 的日期,在另一列中我希望显示期间。 从逻辑上讲,我会使用

这样的条件

Table B.date <= Table A.enddate AND Table B.date >= Table A.startdate

获取时间段名称,相关日期所属。但是,由于我无法将这两个 table 复述为关系数据库中的 table 通常,我目前遇到了这个问题。

在关系数据库中,您通常会看到使用等式谓词关联表的“等值连接”。

但是,您并不局限于这些简单的谓词。您可以使用 任何要关联表的谓词。这些通常称为“theta 连接”。

在你的情况下你可以这样做:

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 中的 运行 示例。