如何在 Access 查询中显示没有键的记录
How to have records without keys show up in Access query
根据评论更新...
第一只股票 (ISIN) 是主要股票,第二只股票是我们衡量业绩的基准 (MNEMONIC)。只要基准存在,我的查询就可以工作并且 returns 结果。但是,当不存在基准时(即因为尚未确定),查询 returns 根本没有结果。我怎样才能让它在任何情况下显示主要股票(总是存在)的结果?
这是我现在的 SQL:
PARAMETERS strISIN Text ( 255 );
SELECT
tblFUNDS.ISIN, tblFunds_TS_Data.Date, tblFunds_TS_Data.Price, tblBM_Data.MNEMONIC,
tblBM_TS_Data.Date, tblBM_TS_Data.Price, RiskFreeReturn.F6 AS RiskFreeReturn_USD,
tblFUNDS.Fund_Selection
FROM
((((tblFUNDS LEFT OUTER JOIN tblFunds_Data ON tblFUNDS.ISIN = tblFunds_Data.ISIN)
LEFT OUTER JOIN tblFunds_TS_Data ON tblFunds_Data.ISIN = tblFunds_TS_Data.ISIN)
LEFT OUTER JOIN tblBM_Data ON tblFUNDS.DS_Benchmark_Symbol = tblBM_Data.MNEMONIC)
LEFT OUTER JOIN tblBM_TS_Data ON tblBM_Data.MNEMONIC = tblBM_TS_Data.MNEMONIC)
LEFT OUTER JOIN RiskFreeReturn ON tblFunds_TS_Data.Date = RiskFreeReturn.F1
WHERE
(((tblFUNDS.ISIN)=[strISIN])
AND ((tblFunds_TS_Data.Date)=[tblBM_TS_Data].[Date]
And (tblFunds_TS_Data.Date)>=#12/28/2013#)
AND ((tblFUNDS.Fund_Selection)=0))
ORDER BY tblFunds_TS_Data.Date;
问题出在 LEFT JOIN 外侧 table 上的 WHERE 条件:
And tblFunds_TS_Data.Date >= #12/28/2013#
要对此 table 进行过滤,您需要添加 OR ... IS NULL
,因此查询仍然可以包含 OUTER 端为空的记录:
And (tblFunds_TS_Data.Date >= #12/28/2013# OR tblFunds_TS_Data.Date IS NULL)
根据评论更新...
第一只股票 (ISIN) 是主要股票,第二只股票是我们衡量业绩的基准 (MNEMONIC)。只要基准存在,我的查询就可以工作并且 returns 结果。但是,当不存在基准时(即因为尚未确定),查询 returns 根本没有结果。我怎样才能让它在任何情况下显示主要股票(总是存在)的结果?
这是我现在的 SQL:
PARAMETERS strISIN Text ( 255 );
SELECT
tblFUNDS.ISIN, tblFunds_TS_Data.Date, tblFunds_TS_Data.Price, tblBM_Data.MNEMONIC,
tblBM_TS_Data.Date, tblBM_TS_Data.Price, RiskFreeReturn.F6 AS RiskFreeReturn_USD,
tblFUNDS.Fund_Selection
FROM
((((tblFUNDS LEFT OUTER JOIN tblFunds_Data ON tblFUNDS.ISIN = tblFunds_Data.ISIN)
LEFT OUTER JOIN tblFunds_TS_Data ON tblFunds_Data.ISIN = tblFunds_TS_Data.ISIN)
LEFT OUTER JOIN tblBM_Data ON tblFUNDS.DS_Benchmark_Symbol = tblBM_Data.MNEMONIC)
LEFT OUTER JOIN tblBM_TS_Data ON tblBM_Data.MNEMONIC = tblBM_TS_Data.MNEMONIC)
LEFT OUTER JOIN RiskFreeReturn ON tblFunds_TS_Data.Date = RiskFreeReturn.F1
WHERE
(((tblFUNDS.ISIN)=[strISIN])
AND ((tblFunds_TS_Data.Date)=[tblBM_TS_Data].[Date]
And (tblFunds_TS_Data.Date)>=#12/28/2013#)
AND ((tblFUNDS.Fund_Selection)=0))
ORDER BY tblFunds_TS_Data.Date;
问题出在 LEFT JOIN 外侧 table 上的 WHERE 条件:
And tblFunds_TS_Data.Date >= #12/28/2013#
要对此 table 进行过滤,您需要添加 OR ... IS NULL
,因此查询仍然可以包含 OUTER 端为空的记录:
And (tblFunds_TS_Data.Date >= #12/28/2013# OR tblFunds_TS_Data.Date IS NULL)