在 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的主要内容,如果未能解决你的问题,请参考以下文章

PHP Codeigniter MySQL 查询 - 将 4 个表连接在一起,其中 3 个表使用每个表中的一列分组

仅使用一个 SQL 请求在 2 个表中进行选择 [重复]

Laravel:如何从具有关系的 3 个表中获取数据

如何从sql中的四个表中进行选择?

如何合并 3 个表中的数据

将数据保存到 2 个表中 cakephp 3