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'
加入 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。
我对 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'
加入 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。