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
我有一个简单的查询来查找相关 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