在 WHERE/Joining 3 个表中进行子查询,2 个用于记录,1 个用于数字,不返回结果/失败 - MSAccess
Posted
技术标签:
【中文标题】在 WHERE/Joining 3 个表中进行子查询,2 个用于记录,1 个用于数字,不返回结果/失败 - MSAccess【英文标题】:subquerying in WHERE/Joining 3 tables, 2 for records and one for number, returns no result/fails - MSAccess 【发布时间】:2018-12-17 10:54:14 【问题描述】:我的查询确实返回了任何记录。根据我的编写方式,它不返回任何记录或所有记录,尽管我没有返回所有内容的代码。
我需要从两个具有实际记录的来源和第三个表中提取数据,该表具有项目范围的信息,而不是特定于任何记录。我需要过滤掉大于 Miles_Budgeted 变量的记录。
这不会返回任何记录,尽管如果我将 param.Miles_Budgeted 替换为数值,例如1000,它过滤到所需的记录。
SELECT
a.sort_id,
a.l1l2,
a.rtot_pct_oftot_miles,
b.sumofeq,
b.c_per_mile,
b.sumofo_total,
a.cpminrmd,
a.RunTotMiles,
param.Miles_Budgeted
FROM
(SELECT (p.Budget_Cost_Targ / p.Project_Cost_Per_Mi) AS Miles_Budgeted FROM Tbl_Project_Parameters as p) AS param,
qry_par_l2_by_cpermi AS a
INNER JOIN
qry_l2 AS b
ON a.l1l2 = b.l1l2
WHERE
((a.RunTotMiles) <=
(Param.Miles_Budgeted
)
)
ORDER BY
a.sort_id;
此查询变体未运行(FROM 子句中的语法错误)
SELECT
a.sort_id,
a.l1l2,
a.rtot_pct_oftot_miles,
b.sumofeq,
b.c_per_mile,
b.sumofo_total,
a.cpminrmd,
a.runtotmiles,
param.miles_budgeted
FROM (
(
SELECT (p.budget_cost_targ / p.project_cost_per_mi) AS miles_budgeted
FROM tbl_project_parameters AS p ) AS param
INNER JOIN qry_par_l2_by_cpermi AS a )
INNER JOIN qry_l2 AS b
ON a.l1l2 = b.l1l2
AND (
a.runtotmiles) <= ( param.miles_budgeted )
ORDER BY a.sort_id;
这也不会返回任何记录:
SELECT
a.sort_id,
a.l1l2,
a.rtot_pct_oftot_miles,
b.sumofeq,
b.c_per_mile,
b.sumofo_total,
a.RunTotMiles,
a.cpminrmd
FROM
qry_par_l2_by_cmipermi AS a
INNER JOIN
qry_l2 AS b
ON a.l1l2 = b.l1l2
WHERE
(
((a.RunTotMiles) <=
(
SELECT
(p.Budget_Cost_Targ / p.Project_Cost_Per_Mi) AS Budgeted_Miles
FROM
Tbl_Project_Parameters AS p
)
)
)
ORDER BY
a.sort_id;
再次,如果
SELECT
(p.Budget_Cost_Targ / p.Project_Cost_Per_Mi) AS Budgeted_Miles
FROM
Tbl_Project_Parameters AS p
用数值替换,查询返回正确的记录。我试过用 val() 或 Format(,"Standard") 包围 subq 或字段,但这并不能解决问题;仅包含相关代码的单独查询会返回正确的 Budgeted_Miles 应为 1000。
任何想法表示赞赏。
【问题讨论】:
您可以首先共享所有三个表的示例数据,以及基于该示例数据的查询的预期结果。我可以修复第二个查询中的语法错误,但我不确定它是否会在不知道结果的情况下返回所需的结果。 我在创建示例数据时遇到问题,但我只想从具有 1-1 关系的两个矩阵中提取字段,根据记录中的一个字段的比较过滤结果基于向量的计算。如果您可以发布对语法错误的修复,那将很有帮助。谢谢 哦,nvm,该查询充满了错误。缺少用于子查询内部连接的ON
子句,子查询周围的括号无效(AS
应该在右括号之后,而不是之前),您需要在第二个 ON
子句周围添加括号,这只是在不知道数据和关系的情况下,这意味着可能会发现更多。
【参考方案1】:
您是否尝试过将该子查询限制为只返回一条记录?我知道某些版本的 SQL 不喜欢您尝试将 SELECT
的结果与单个值进行比较。
我相信 MS Access 的语法会使用“TOP”:
SELECT TOP 1
(p.Budget_Cost_Targ / p.Project_Cost_Per_Mi) AS Budgeted_Miles
FROM
Tbl_Project_Parameters AS p
【讨论】:
谢谢,但是当我刚刚尝试时,这似乎并不能解决问题。以上是关于在 WHERE/Joining 3 个表中进行子查询,2 个用于记录,1 个用于数字,不返回结果/失败 - MSAccess的主要内容,如果未能解决你的问题,请参考以下文章