我正在查询数据库中的零件表,在该表中我加入了库存和其他表,这样如果库存没有数量,我可以返回“不可用”来代替数量。
这是我的查询:
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/