SQL 查询比较不同表的列,即使是 NULL

SQL Query Compare Columns of different tables even when NULL

我对 SQL 语法并不擅长,我正在自学。我正在努力处理一个 SQL 查询,我用它来比较基于成品父项的库存项目的价格(当前和过去)。

库存项目是购买的或内部创建的。我有 3 个 table 要比较:一个 table [FinishedGood] 包含父项目及其所需的组件,一个 table [Inventory] 包含所有库存项目(在内部购买和创建),以及仅包含购买项目的 table [Purchased]。后两者持有定价。

举个例子,假设我正在制作溜溜球。我制作了溜溜球的主体,但购买了绳子和轴。正文将是在第 2 个 table 中找到的静态开销。但是,购买的商品价格可能会波动(第二个 table 包含所有商品的最新价格)。第3个table只能用于查看最近3个月购买商品的价格。

现在我看到的问题是当我比较 table 3(仅购买的商品价格)时,我的查询结果隐藏了内部创建的项目(我附上了我想要的图片实现)下面是我到目前为止所写内容的示例。

如有任何帮助,我们将不胜感激。

SELECT DISTINCT
    vdvFinishedGood.StepID AS [Step],
    vdvFinishedGood.ComponentID AS [Component],
    vdvInventory.LastUnitCost AS [Current Cost],
    (vdvPurchased.Cost) AS [Purchased Cost]
FROM 
    vdvFinishedGood
JOIN 
    vdvInventory ON vdvInventory.ComponentID = vdvFinishedGood.ComponentID
JOIN
    vdvPurchased ON vdvPurchased.ComponentID = vdvFinishedGood.ComponentID
WHERE 
    vdvFinishedGood.ItemId = 'YOYO'

http://sqlfiddle.com/#!18/8638ad/1/0

加入 table Purchased 时,您需要使用 LEFT JOIN 而不是 JOIN。我将你的 fiddle 修改为:

SELECT DISTINCT
    FinishedGood.StepID AS [Step],
    FinishedGood.ComponentID AS [Component],
    Inventory.LastUnitCost AS [Current Cost],
    Purchased.Cost AS [Purchased Cost]

FROM FinishedGood
JOIN Inventory ON Inventory.ComponentID = FinishedGood.ComponentID
LEFT JOIN Purchased ON Purchased.ComponentID = FinishedGood.ComponentID

WHERE FinishedGood.ItemId = 'YOYO'

ORDER BY [Step]

结果:

 Step  Component  Current Cost  Purchased Cost 
 ----- ---------- ------------- -------------- 
 001   Body       1.00          (null)         
 002   String     0.25          0.55           
 003   Shaft      1.15          1.15         

请参阅 SQL fiddle 处修改的 fiddle。