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