我有三张桌子
dbo.Products (productname, price)
dbo.Stock (productid, storeid, stocklevel)
dbo.Store (storename)
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中。
非常感谢任何帮助!
答案 0 :(得分:1)
您需要在表上使用LEFT JOIN
来返回带有空值的值:
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
答案 1 :(得分: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) - 无论该产品是否有库存 - 或者不是。那些没有库存的产品会为NULL
返回StockLevel
,我会使用ISNULL
功能捕获该产品并将其转换为no units
以供展示。