首页 > 解决方案 > 为什么内部联接导致查询仅显示非空列的结果?

问题描述

我正在运行下面的查询,它运行良好。

SELECT
    stock_parts.title,
    COUNT(*) as qtyAvailable,
    SUM(shipments.item_cost) as totalValue,
    ### stock_alerts.minimum
FROM
    stock_items
INNER JOIN stock_parts ON stock_items.stock_part_id = stock_parts.id
INNER JOIN shipments ON shipments.id = stock_items.shipment_id
### INNER JOIN stock_alerts ON stock_alerts.stock_part_id = stock_items.stock_part_id
WHERE
    stock_items.status IS NULL
    AND stock_items.current_stock_id = 1
GROUP BY stock_parts.id

因此,如果我取消注释两条注释行(是从另一个表获取信息的连接),查询结果将被过滤,仅显示stock_alerts.minimum不为空的行。

为什么会这样?我需要该列为 NULL 的所有结果事件。

标签: mysql

解决方案


什么INNER JOIN是输出行结果,其中没有一个表在该单元格上具有空值。换句话说(来自 W3 学校):

INNER JOIN 关键字选择在两个表中具有匹配值的记录

尝试使用FULL OUTER JOIN而不是获取所有记录,即使其中一个表具有 NULL 值。请参阅W3 Schools FULL OUTER JOIN的说明。

编辑:

我没有意识到您的标签之一是 MySQL。在这里,您有一篇文章解释了如何在 MySQL 中模拟 FULL OUTER JOIN


推荐阅读