sql - 这里有没有在 SQL 查询中使用交叉连接的替代方法?
问题描述
我有两个表Person_Gaps
,MissingDates
我需要在其中生成一个新表Output
,该表是所有行与人员 ID 以及MissingDates
根据它们在Person_Gaps
. 表格示例如下:
Person_Gaps
PersonId StartDate EndDate
1 2011-01-01 2011-04-01
1 2014-12-31 2015-05-03
2 2011-01-01 2011-02-01
3 2015-01-01 2015-05-03
.
.
缺失日期
DateVal
2011-01-01
2011-01-02
2011-01-03
.
.
.
2016-01-03
所需输出表
PersonID DateVal
1 2011-01-01
1 2011-01-02
. .
. .
2 2011-01-01
2 2011-01-02
3 2015-01-01
3 2015-01-02
. .
. .
3 2015-05-03
我可以使用以下SELECT
语句获得当前想要的输出,CROSS JOIN
但我想知道是否有更好的方法可以在没有 T-SQL 中的交叉连接的情况下执行此操作。也许以某种方式使用 BETWEEN 或日期范围。
SELECT p.PersonID, md.DateVal
FROM Person p
CROSS JOIN MissingDates md
WHERE md.DateVal >= p.StartDate AND md.DateVal <= p.EndDate
解决方案
你的查询没问题。它可以用一个来写JOIN
:
SELECT p.PersonID, md.DateVal
FROM Person p JOIN
MissingDates md
ON md.DateVal >= p.StartDate AND md.DateVal <= p.EndDate;
你的结果表明你想要平等。
注意:以上将生成与您的查询相同的执行计划。它摆脱了CROSS JOIN
,但这可能不会影响性能。
推荐阅读
- java - 最新 AdoptOpenJDK 无法编译 Java 8 Maven 项目
- docker - Gitlab CI/CD 我做错了什么?卡住
- javascript - 如何从现有网页向 React 组件传递回调函数?
- f# - 以 Thoth.Json 可编码格式获取查询结果
- python-3.x - 我的 pyhon 代码如果 [P2, P3, P4, P5] 是 [not None, None, None, None] 它应该可以工作但不是
- optimization - 如果阿特金斯筛的时间复杂度比埃拉托色尼筛好,为什么埃拉托色尼总是有更快的运行时间
- javascript - 反应,我似乎无法将每个电影 ID 变成电影 ID 的提供者链接
- jestjs - React 测试点击处理程序钩子
- jupyter-notebook - 如何在降价单元格中按原样打印 ` , [] 等特殊字符?
- opengl - 着色器无法绘制实体?