mysql - 为什么内部联接导致查询仅显示非空列的结果?
问题描述
我正在运行下面的查询,它运行良好。
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 的所有结果事件。
解决方案
什么INNER JOIN
是输出行结果,其中没有一个表在该单元格上具有空值。换句话说(来自 W3 学校):
INNER JOIN 关键字选择在两个表中具有匹配值的记录
尝试使用FULL OUTER JOIN
而不是获取所有记录,即使其中一个表具有 NULL 值。请参阅W3 Schools FULL OUTER JOIN的说明。
编辑:
我没有意识到您的标签之一是 MySQL。在这里,您有一篇文章解释了如何在 MySQL 中模拟 FULL OUTER JOIN
推荐阅读
- c - 如何使用指针为 c 中的结构添加多个值?
- reactjs - React JS 中的 ComponentWillMount 和 ComponentDidMount 有什么区别?
- c++ - C ++运行直到按键
- php - 在 curl 中模拟一个真实的浏览器
- jquery - jQuery - 使用 jQuery 元素变量时如何获取选定的选项?
- java - Java Graphics2D drawImage() 和 clip():如何应用抗锯齿?
- r - 使用具有不同列名的另一个 data.table 过滤 data.table
- python - 我在 Mac 上安装了自制软件的 Python 中的 Idle (idle3) 崩溃了
- .net - 仅针对选择查询忽略实体属性。但在更新/插入期间仍需考虑它们。EF 核心 2.1
- python - 如何在python中重新启动其他程序?