LEFT JOIN 不返回 NULL
LEFT JOIN not returning NULL
我想问题归结为:在哪些极端情况下使用 LEFT OUTER JOIN
并没有 return 预期的值?因为在结果集中我期待我加入的字段(item
和 ID
)+ 行不匹配的任何 NULL 值,但是 item
和 ID
不要出现
信息:
qry_HersheySAPMaxDate2
returns 95 行。
qry_HersheySAPMaxDate2
可以为 MaxOfMaxOfjob_Date
、SumOfSumOfqty_on_hand
、product_code
和 whse
、 而 ID
和 item
将始终有一个值。
qry_HersheySAPMaxDate3
returns 85 行。
qry_HersheySAPMaxDate3
在任何字段中都没有任何 NULL 值,但不包括 10 id
和 item
行。
查询:
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:
如果您希望 NULL 值包含在结果中,您应该使用 LEFT OUTER JOIN
您抱怨您的查询生成了完全空白的行。让我们看看为什么:
您将 qry3 外部连接到 qry2。这意味着当 qry3 中的 qry2 记录没有匹配项时,将连接所有列都设置为空的伪 qry3 记录。
在您的查询中,您 select 只有来自 qry3 的字段,因此在外连接情况下它们都是空的。 Select qry2.ID 和 qry2.item 而不是 qry3.ID 和 qry3.item 以查看不匹配的值:
SELECT
qry_HersheySAPMaxDate2.ID,
qry_HersheySAPMaxDate2.item,
我想问题归结为:在哪些极端情况下使用 LEFT OUTER JOIN
并没有 return 预期的值?因为在结果集中我期待我加入的字段(item
和 ID
)+ 行不匹配的任何 NULL 值,但是 item
和 ID
不要出现
信息:
qry_HersheySAPMaxDate2
returns 95 行。
qry_HersheySAPMaxDate2
可以为 MaxOfMaxOfjob_Date
、SumOfSumOfqty_on_hand
、product_code
和 whse
、 而 ID
和 item
将始终有一个值。
qry_HersheySAPMaxDate3
returns 85 行。
qry_HersheySAPMaxDate3
在任何字段中都没有任何 NULL 值,但不包括 10 id
和 item
行。
查询:
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:
如果您希望 NULL 值包含在结果中,您应该使用 LEFT OUTER JOIN
您抱怨您的查询生成了完全空白的行。让我们看看为什么:
您将 qry3 外部连接到 qry2。这意味着当 qry3 中的 qry2 记录没有匹配项时,将连接所有列都设置为空的伪 qry3 记录。
在您的查询中,您 select 只有来自 qry3 的字段,因此在外连接情况下它们都是空的。 Select qry2.ID 和 qry2.item 而不是 qry3.ID 和 qry3.item 以查看不匹配的值:
SELECT
qry_HersheySAPMaxDate2.ID,
qry_HersheySAPMaxDate2.item,