mysql join with condition on 子句返回 null

标签 mysql

我正在查询数据库中的零件表,在该表中我加入了库存和其他表,这样如果库存没有数量,我可以返回“不可用”来代替数量。

这是我的查询:

select partNumber, 1 as QtyRequired, IFNULL(inventory.Quantity,0) as QtyAvailable,IFNULL(Stagename,"Not Available") as Stagename,IFNULL(LocationName,"Not Available") as LocationName  from parts
left join inventory on parts.partID = inventory.partid
left join locations on inventory.LocationID = locations.LocationID
left join stages on inventory.StageID= stages.StageID and stagename <> 'green'
where assembly is true and parts.partID = 7732

问题是当 stagename 为绿色时我不想返回数量。

现在我的数据库中有一行partID 7732,它处于绿色阶段,但它确实有一个位置。我得到的结果是:

PartNumber QtyRequired QtyAvailable StageName     LocationName
SENSODINE2   1            150       Not Available  Warehouse5

我所期待的是

PartNumber QtyRequired QtyAvailable StageName     LocationName
SENSODINE2   1            0       Not Available   Not Available

为了实现这一目标,我想我会做类似的事情:

select partNumber, 1 as QtyRequired, IFNULL(inventory.Quantity,0) as QtyAvailable,IFNULL(Stagename,"Not Available") as Stagename,IFNULL(LocationName,"Not Available") as LocationName  from parts
left join inventory on parts.partID = inventory.partid and stagename <> 'green'
left join locations on inventory.LocationID = locations.LocationID and stagename <> 'green'
left join stages on inventory.StageID= stages.StageID and stagename <> 'green'
where assembly is true and parts.partID = 7732

但是这样做给了我:

Error Code 1054: Unknown column 'stagename' in 'on clause'

最佳答案

只需将 stagename 移动到 where 子句

SELECT partNumber,
       1                                     AS QtyRequired,
       IFNULL(inventory.Quantity, 0)         AS QtyAvailable,
       IFNULL(Stagename, "Not Available")    AS Stagename,
       IFNULL(LocationName, "Not Available") AS LocationName
FROM parts
         LEFT JOIN inventory ON parts.partID = inventory.partid
         LEFT JOIN locations ON inventory.LocationID = locations.LocationID
         LEFT JOIN stages ON inventory.StageID = stages.StageID
WHERE assembly IS TRUE
  AND parts.partID = 7732
  AND Stagename <> 'green'

我不相信您可以加入别名字段,但您以后随时可以过滤它们。

此外,为了避免歧义,最好不要将别名命名为与要过滤的字段名称相同的名称。将其命名为 stageNameReadable 或类似的名称将帮助您以不同的方式对待该字段,因为作为计算字段,它将具有不同的属性。

关于mysql join with condition on 子句返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59222819/

相关文章:

php - Laravel Eloquent Eager Loading 和 ownToMany 太慢

mysql - 我怎样才能画出我的数据库设计?

mysql - 使用选择查询加载数据文件以进行数据查找

php - 我的数据库设计中的搜索会很慢吗?

javascript - anchor 标记 html 上的 onclick javascript

从数据库中选择最受欢迎地点的算法

mysql - 使用 join 进行 SQL 聚合

php - 使用php动态生成html复选框

mysql - hibernate SQL 注入(inject)

mysql - 我将如何创建这个 MySQL 架构?