SQLite:嵌套 SELECT 语句的替代查询
SQLite: Alternative Query for Nested SELECT Statements
以下是两个表的相关列:
DataSources
-----------
Column: DataSourceID --> Primary Key
TimeSteps
-----------
Column: TimeStepID --> PrimaryKey
Column: Date --> (of the form YYYY-MM-DD)
Column: DataSourceID --> Foreign Key
我可以对多个数据源使用相同的 Date
,但使用不同的 TimeStepID
。 我想查找哪些数据源共享一个日期,只给出一个 TimeStepID。
我提出的有效查询如下:
SELECT DISTINCT ds.DataSourceID FROM DataSources ds
JOIN TimeSteps AS ts USING(DataSourceID)
WHERE ts.TimeStepID IN
(SELECT TimeStepID FROM TimeSteps WHERE Date IN
(SELECT Date FROM TimeSteps WHERE TimeStepID = ?))
有没有办法在没有嵌套 SELECT 语句的情况下简化此查询?
如果您在结果中想要的是 DataSourceID
,则无需连接到 DataSources
。
另外,查询:
SELECT Date FROM TimeSteps WHERE TimeStepID = ?
returns只有1行1列,所以不需要运算符IN
.
试试这个:
SELECT DISTINCT DataSourceID
FROM TimeSteps
WHERE Date = (SELECT Date FROM TimeSteps WHERE TimeStepID = ?);
如果DataSourceID
和Date
的组合是唯一的,则不需要DISTINCT
。
以下是两个表的相关列:
DataSources
-----------
Column: DataSourceID --> Primary Key
TimeSteps
-----------
Column: TimeStepID --> PrimaryKey
Column: Date --> (of the form YYYY-MM-DD)
Column: DataSourceID --> Foreign Key
我可以对多个数据源使用相同的 Date
,但使用不同的 TimeStepID
。 我想查找哪些数据源共享一个日期,只给出一个 TimeStepID。
我提出的有效查询如下:
SELECT DISTINCT ds.DataSourceID FROM DataSources ds
JOIN TimeSteps AS ts USING(DataSourceID)
WHERE ts.TimeStepID IN
(SELECT TimeStepID FROM TimeSteps WHERE Date IN
(SELECT Date FROM TimeSteps WHERE TimeStepID = ?))
有没有办法在没有嵌套 SELECT 语句的情况下简化此查询?
如果您在结果中想要的是 DataSourceID
,则无需连接到 DataSources
。
另外,查询:
SELECT Date FROM TimeSteps WHERE TimeStepID = ?
returns只有1行1列,所以不需要运算符IN
.
试试这个:
SELECT DISTINCT DataSourceID
FROM TimeSteps
WHERE Date = (SELECT Date FROM TimeSteps WHERE TimeStepID = ?);
如果DataSourceID
和Date
的组合是唯一的,则不需要DISTINCT
。