【问题标题】:mySQL query LEFT OUTER JOIN not showing nullmySQL查询LEFT OUTER JOIN不显示null
【发布时间】:2017-05-17 15:42:38
【问题描述】:

我正在尝试使用部件表中的描述输出库存表中的所有行。以下是表格:

库存表

零件表

我想要的是从具有特定 orderNumber 的库存行中输出所有 SKU,并在其旁边显示 SKU 的描述。如果库存 SKU 与零件 SKU 不匹配,我想将描述输出为 NULL。

这是我现有的查询:

SELECT * FROM inventory LEFT OUTER JOIN parts ON inventory.sku = parts.sku AND parts.description IS NULL WHERE orderID = $orderID

请帮忙。

【问题讨论】:

  • 根据提供的信息我说你有两个问题之一:1)一个或两个表中的 SKU 有非显示字符,导致没有记录匹配。 2) 传入的 $orderID 不匹配任何记录。如果没有记录,我会运行不带 where 子句的查询。如果没有记录返回,那么您需要处理 SKU 中的非显示字符。也许修剪记录以删除空格?如果您获得记录,则您传入的 $OrderID 无效。 Likley 自从左连接以来的第二个应该至少返回 Inventory。

标签: mysql left-join


【解决方案1】:

您应该将parts.description IS NULL 条件移动到您的where 子句中,因为在加入右表上的所有行时,其字段中都没有null

SELECT  *
FROM    inventory
LEFT OUTER JOIN
        parts
ON      inventory.sku = parts.sku
WHERE   orderID = $orderID AND
        parts.description IS NULL 

编辑

更好地阅读您的要求,似乎您想要左表中的所有行,无论它们在右表中是否匹配。如果是这种情况,您可以完全摆脱这种情况

SELECT  *
FROM    inventory
LEFT OUTER JOIN
        parts
ON      inventory.sku = parts.sku
WHERE   orderID = $orderID

【讨论】:

  • 那是我的第一次尝试。有了这个,我得到的只是 SKU 11111 所在的行,因为这是唯一一个有 SKU 描述的条目。几乎就像一个 INNER JOIN。
  • 第二个似乎应该可以工作......如果没有设置一个带有示例数据的 SQL fiddle 来显示问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-10
  • 2018-12-04
  • 2013-03-14
  • 1970-01-01
  • 1970-01-01
  • 2012-11-17
相关资源
最近更新 更多