1

3つのテーブルがあります

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 JOINnull を含む値を返すには、テーブルで 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) の商品とその在庫が得られます。その商品の在庫があるかどうかは関係ありません。在庫のない製品は に対して を返しNULLます。これを関数でStockLevelキャプチャし、表示用ISNULLに変換しno unitsます。

于 2012-08-16T15:12:42.173 に答える