【问题标题】:LEFT JOIN not returning NULLLEFT JOIN 不返回 NULL
【发布时间】:2016-05-20 12:46:01
【问题描述】:

我想问题归结为:使用LEFT OUTER JOIN 按预期返回值的极端情况是什么?因为在结果集中,我期待我加入的字段(itemID)+ 行不匹配的任何 NULL 值,但 itemID 不会出现。

信息:

qry_HersheySAPMaxDate2 返回 95 行。

qry_HersheySAPMaxDate2 可以为 MaxOfMaxOfjob_DateSumOfSumOfqty_on_handproduct_codewhse 具有 NULL 值, IDitem 将始终具有值。

qry_HersheySAPMaxDate3 返回 85 行。

qry_HersheySAPMaxDate3 在任何字段中都没有任何 NULL 值,但不包括 10 行 iditem

查询:

SELECT 
qry_HersheySAPMaxDate3.ID, 
qry_HersheySAPMaxDate3.item, 
qry_HersheySAPMaxDate3.MaxOfMaxOfjob_date, qry_HersheySAPMaxDate3.SumOfSumOfqty_on_hand, qry_HersheySAPMaxDate3.product_code, 
qry_HersheySAPMaxDate3.whse, 
qry_HersheySAPMaxDate3.jobnumber

FROM 
qry_HersheySAPMaxDate2 
LEFT JOIN qry_HersheySAPMaxDate3 ON (qry_HersheySAPMaxDate2.item = qry_HersheySAPMaxDate3.item) AND (qry_HersheySAPMaxDate2.ID = qry_HersheySAPMaxDate3.ID);

使用我的查询的结果集 + 使用 LEFT OUTER JOIN 的答案之一的建议:

Screenshot

【问题讨论】:

  • 尝试在sqlfiddle.com上设置一个独立的示例
  • 最小化,添加样本表数据,当前结果和预期结果!
  • 尝试颠倒查询顺序或使用RIGHT JOIN
  • 不匹配的 qry_HersheySAPMaxDate2 行不会在 Query4 上匹配失败吗? - 哎呀不 - 抱歉,“MaxDate2”误读了“Query2”
  • 您是说至少有一个项目/id 组合在 qry_HersheySAPMaxDate2 中有记录但在 qry_HersheySAPMaxDate3 中没有记录,并且显示的查询没有任何带有 NULL 的结果行?这似乎不可能。请再次检查。

标签: sql join null ms-access-2013


【解决方案1】:

您抱怨您的查询产生了完全空白的行。让我们看看为什么:

您将 qry3 外连接到 qry2。这意味着当 qry3 中的 qry2 记录不匹配时,将连接所有列都设置为 null 的伪 qry3 记录。

在您的查询中,您仅选择来自 qry3 的字段,因此在外连接情况下,它们都为空。选择 qry2.ID 和 qry2.item 而不是 qry3.ID 和 qry3.item 以查看不匹配的值:

SELECT 
  qry_HersheySAPMaxDate2.ID, 
  qry_HersheySAPMaxDate2.item, 

【讨论】:

  • 哦,天哪....你是绝对正确的....哇哈哈。在 Access 中使用设计视图我不会猜到我选择哪一个很重要....
  • 真诚地感谢您对此的耐心等待!!!我知道阅读和处理所有信息真的很令人沮丧!
【解决方案2】:

如果您希望 NULL 值包含在结果中,您应该使用 LEFT OUTER JOIN

【讨论】:

  • 这不起作用。它没有包含所有项目和 ID,而是仅包含完全空白的行。 imgur.com/eglVMcu
猜你喜欢
  • 2010-11-05
  • 2015-01-30
  • 1970-01-01
  • 2019-03-25
  • 1970-01-01
  • 2023-03-26
  • 2021-02-09
  • 2015-01-13
  • 1970-01-01
相关资源
最近更新 更多