[英]subquerying in WHERE/Joining 3 tables, 2 for records and one for number, returns no result/fails - MSAccess
我的查詢不會返回任何記錄。 盡管我沒有返回所有內容的代碼,但根據我的編寫方式,它不返回記錄或返回所有記錄。
我需要從具有實際記錄的兩個來源中提取數據,而第三個表具有的項目范圍信息並非特定於任何記錄。 我需要過濾出大於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。
任何想法表示贊賞。
您是否嘗試過限制該子查詢僅返回一條記錄? 當您嘗試將SELECT
的結果與單個值進行比較時,我知道某些SQL版本不喜歡。
我相信MS Access的語法將使用“ TOP”:
SELECT TOP 1
(p.Budget_Cost_Targ / p.Project_Cost_Per_Mi) AS Budgeted_Miles
FROM
Tbl_Project_Parameters AS p
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.