SQLite嵌套SELECT替代查询:按单TimeStepID查询共享日期的数据源
简化方案
你完全可以用TimeSteps表自关联实现需求,不需要任何嵌套SELECT语句,简化后的查询如下:
SELECT DISTINCT ts2.DataSourceID FROM TimeSteps ts1 INNER JOIN TimeSteps ts2 ON ts1.Date = ts2.Date WHERE ts1.TimeStepID = ?
逻辑说明
- 先通过
WHERE ts1.TimeStepID = ?定位到你给定的时间步对应行,拿到该行的Date值 - 通过自关联匹配出所有
Date和该值相等的TimeSteps行 - 直接去重取这些行的
DataSourceID即可,不需要额外关联DataSources表(因为TimeSteps里的DataSourceID是外键,和DataSources的主键是一一对应的)
如果你的场景需要严格校验DataSourceID必须在DataSources表中存在,可以加上关联逻辑,依然不需要嵌套子查询:
SELECT DISTINCT ds.DataSourceID FROM TimeSteps ts1 INNER JOIN TimeSteps ts2 ON ts1.Date = ts2.Date INNER JOIN DataSources ds ON ts2.DataSourceID = ds.DataSourceID WHERE ts1.TimeStepID = ?
这个方案比你原来的两层嵌套子查询执行效率更高,逻辑可读性也更好。
内容的提问来源于stack exchange,提问作者jslmsca
相关产品推荐
相关产品推荐

