1

我有三张桌子

dbo.Products (productname, price)
dbo.Stock (productid, storeid, stocklevel)
dbo.Store (storename)

基本上,Stock 表是 Products 和 Stock 之间的关系表。它将显示该特定商店有库存的所有产品。这是我能够做到的,这就是我得到的:

店铺名称:BeachFrontStore

Products  StockLevel
Pencil    400 units
Bic Pen   640 units

现在我还想添加当前商店没有库存的产品。这样用户就有了视觉反馈。我需要完成什么:

店铺名称:BeachFrontStore

Products  StockLevel
Pencil    400 units
Bic Pen   640 units
Eraser    'no units'

橡皮擦是在 dbo.Stock 中没有关系但在 dbo.Products 中存在的产品。

任何帮助是极大的赞赏!

4

2 回答 2

1

您需要LEFT JOIN在表上使用 s 来返回带有空值的值:

select p.productname, sl.stocklevel, s.storename
from products p
left join stocklevel sl
    on p.ProductID = sl.ProductID
left join store s
    on s.storeid = sl.storeid

请参阅带有演示的 SQL Fiddle

于 2012-08-16T15:17:29.817 回答
0

您基本上需要一个OUTER JOIN介于产品和库存之间的产品来获取所有产品——无论它们是否有库存。

就像是:

SELECT
     p.ProdudctName,
     ISNULL(s.StockLevel, 'no units')
FROM
   dbo.Products p
LEFT OUTER JOIN
   dbo.Stock s ON p.ProductID = s.ProductID
WHERE
   (s.StoreId = 42 OR s.StoreID IS NULL)

这将为您提供产品及其库存 - 对于给定商店(此处:StoreId = 42) - 无论该产品是否有库存。那些没有库存的产品将返回一个NULLStockLevel我用函数捕获ISNULL并将其转换no units为显示。

于 2012-08-16T15:12:42.173 回答