2016-07-15 13 views
0

こんにちは私は注文を購入するためのスキーマを作っています。これらの注文は特定のユーザーによって注文され、別のユーザーが受け取ることができます。複数のテーブルからレコードを取得する

DeliveriesテーブルのUserID値がnullの場合、クエリはレコードを返しません。

注文がまだ配信されていないため、UserIDの値はnullです。

クエリ

SELECT pu.FirstName as purchase_FirstName, pu.LastName as purchase_LastName, 
     du.FirstName as delivery_FirstName, du.LastName as delivery_LastName, 
     po.PurchaseOrderDate, 
     d.ExpectedDeliveryDate, d.ActualDeliveryDate 
FROM dbo.PurchaseOrders po JOIN 
    dbo.Deliveries d 
    ON po.PurchaseOrderID = d.PurchaseOrderID JOIN 
    dbo.Users pu 
    ON po.UserID = pu.UserID JOIN 
    dbo.Users du 
    ON d.UserId = du.UserId; 

スキーマ

enter image description here

+0

したがって、WHERE UserID IS NOT NULLという条件を設定します。または、それらを含める場合は、useridがnullの場合に実行できます。それでもレコードが必要な場合は、結合を左結合に変更する必要があります。 – JonH

+0

'Deliveries'の' left join'はそのトリックを行いますか? –

答えて

3
あなたがここにJOINをLEFTが必要

ほとんどの場合。少し書式を設定すると、これを読みやすくなります。さまざまな種類の結合を理解するには、この記事を参照してください。 http://blog.codinghorror.com/a-visual-explanation-of-sql-joins/

SELECT pu.FirstName as purchase_FirstName 
    , pu.LastName as purchase_LastName 
    , du.FirstName as delivery_FirstName 
    , du.LastName as delivery_LastName 
    , po.PurchaseOrderDate 
    , d.ExpectedDeliveryDate 
    , d.ActualDeliveryDate 
FROM dbo.PurchaseOrders po 
JOIN dbo.Users pu ON po.UserID = pu.UserID 
left JOIN dbo.Deliveries d ON po.PurchaseOrderID = d.PurchaseOrderID 
left JOIN dbo.Users du ON d.UserId = du.UserId; 
関連する問題