sql - 相关子查询中没有这样的列
问题描述
因此,我编写了一个与此答案中描述的查询几乎相同的查询。但是,我收到一条错误消息,指出: No such column b.when
。
我的选择声明:
SELECT
mileage,
(SELECT b.mileage FROM MileageEvents as b WHERE `b.when` < `a.when` ORDER BY `b.when` DESC LIMIT 1) as last_mileage,
gallons,
cost_per_gallon,
`when`
FROM MileageEvents as a
我知道我以前写过这样的查询,但我似乎无法弄清楚这个查询发生了什么。我究竟做错了什么?
我的数据库转储:
PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE IF NOT EXISTS "MileageEvents" (
"mileage" INTEGER,
"when" TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
"cost_per_gallon" INTEGER,
"gallons" INTEGER,
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
"car_id" INTEGER NOT NULL
);
INSERT INTO MileageEvents VALUES(150000,'2019-03-12',3.3500000000000000888,12,1,1);
INSERT INTO MileageEvents VALUES(150300,'2019-03-19',3.25,12,2,1);
INSERT INTO MileageEvents VALUES(150693,'2019-03-22',3.4500000000000001776,12,3,1);
INSERT INTO MileageEvents VALUES(151000,'2019-03-25',3.3900000000000001243,12,4,1);
INSERT INTO MileageEvents VALUES(151600,'2019-04-01',2.25,12,5,1);
INSERT INTO MileageEvents VALUES(151883,'2019-06-10 23:01:43',2.4500000000000001776,11.695999999999999729,6,1);
DELETE FROM sqlite_sequence;
INSERT INTO sqlite_sequence VALUES('MileageEvents',6);
COMMIT;
解决方案
(首先,我会使用普通的双引号转义而不是 MySQL 风格的反引号,或者更好的是,一个不是保留关键字的标识符)
你需要使用b."when"
. 您所做的将整个字符串b.when
视为标识符,表名和列名之间没有拆分。
重写:
SELECT
mileage,
(SELECT b.mileage FROM MileageEvents as b WHERE b."when" < a."when" ORDER BY b."when" DESC LIMIT 1) as last_mileage,
gallons,
cost_per_gallon,
"when"
FROM MileageEvents as a;
注意:如果使用 sqlite 3.25 或更高版本,您可以完全避免子查询:
SELECT
mileage,
lag(mileage) OVER (ORDER BY "when") AS last_mileage,
gallons,
cost_per_gallon,
"when"
FROM MileageEvents;
推荐阅读
- python - 使用 Pandas 创建日期列,使用 asfreq 填充特定时期之间的日期间隔
- swiftui - SwiftUI 中的 viewWillAppear() 或其他等效项
- xml - XSLT 转换 XML:选择 uuid 并按顺序排序
- ide - 是否有任何工具或实践可用于跟踪开发人员 IDE 和工具版本?
- node.js - Nodejs - RTSP 实时摄像机源 - 分布式架构
- java - 带有gui的javamail多个附件
- python - 试图编写python代码来解决二次公式,有一些问题
- reactjs - 使用 Material UI 的 AutoComplete + react hook 表单时出错
- security - Letsencrypt 日志中的证书
- java - 如何使用 Jaxb 或 jackson 在另一个 XML 标记中解组具有相同名称但结构不同的重复 XML 标记