MS Access:如何在第一个中找不到值时查询第二个 table

MS Access: How to query a second table when value is not found in the first

我有一个简单的查询来查找相关 table 中的值。在某些情况下,该值为空。在这种情况下,我想查询第二个table。我查看了 NZ 函数,但它不允许进行其他查询操作。我假设我正在查看嵌套查询或类似 SQL COALASCE.

的操作

我要先搜索tbl_bi_item_mstr

SELECT tbl_cust_fcst_demd.cust_item_nr, tbl_bi_item_mstr.bi_item_nr
FROM tbl_cust_fcst_demd LEFT JOIN tbl_bi_item_mstr ON tbl_cust_fcst_demd.cust_item_nr = tbl_bi_item_mstr.bi_item_nr;

对于空值,我想在 tbl_cust_xref

中找到它们
SELECT tbl_cust_fcst_demd.cust_item_nr, tbl_cust_xref.bi_item_nr
FROM tbl_cust_fcst_demd INNER JOIN tbl_cust_xref ON tbl_cust_fcst_demd.cust_item_nr = tbl_cust_xref.cust_item_nr;

条件查询可能很棘手,您可以在宏或 vba 等中完成,但这需要在 sql 语句之外完成。如果您希望保持简单,我建议将 2 个表与一个区分列合并。

下面联合的示例代码:

SELECT 
tbl_cust_fcst_demd.cust_item_nr
, tbl_bi_item_mstr.bi_item_nr
, 1 as "src_priority"
FROM tbl_cust_fcst_demd LEFT JOIN tbl_bi_item_mstr ON tbl_cust_fcst_demd.cust_item_nr = tbl_bi_item_mstr.bi_item_nr

Union

SELECT tbl_cust_fcst_demd.cust_item_nr
, tbl_cust_xref.bi_item_nr
, 2 as "src_priority"
FROM tbl_cust_fcst_demd INNER JOIN tbl_cust_xref ON tbl_cust_fcst_demd.cust_item_nr 

Order by src_priority

您可能仍在处理消费需求,我建议将联合保留为 query/view 并为消费查询创建另一个 select(取决于您的要求和性能),其中您可以聚合或分区等

您可以简单地连接两个 table,并在结果字段之间使用 Nz()

SELECT d.cust_item_nr, Nz(i.bi_item_nr, x.bi_item_nr) AS bi_item_nr
FROM (tbl_cust_fcst_demd d 
LEFT JOIN tbl_bi_item_mstr i ON d.cust_item_nr = i.bi_item_nr)
INNER JOIN tbl_cust_xref x ON d.cust_item_nr = x.cust_item_nr

对于 >1 个 JOIN,需要括号。
使用 table 别名使 SQL 更易于阅读。

Andre 的建议很有帮助。需要 INNER JOIN 更改为 LEFT JOIN 或忽略空值。

SELECT d.cust_item_nr, Nz([i].[bi_item_nr],[x].[bi_item_nr]) AS bi_item_nr
FROM (tbl_cust_fcst_demd AS d 
LEFT JOIN tbl_bi_item_mstr AS i ON d.cust_item_nr = i.bi_item_nr) 
LEFT JOIN tbl_cust_xref AS x ON d.cust_item_nr = x.cust_item_nr