2016-07-06 8 views
1

こんにちは私は注文を購入するためのスキーマを作っています。これらの注文は特定のユーザーによって注文され、その後別のユーザーが受け取ることができます。クエリはレコードを返しません

私は以下のスキーマを作成しました。

スキーマ

Schema

PurchaseOrdersDeliveriesテーブルのUserID列がクエリがレコードを返さない異なる値を持つ場合、問題があります。あなたが異なる2がUsersに参加する必要がある

クエリ

SELECT 
    dbo.Users.FirstName, 
    dbo.Users.LastName, 
    dbo.PurchaseOrders.PurchaseOrderDate, 
    dbo.Deliveries.ExpectedDeliveryDate, 
    dbo.Deliveries.ActualDeliveryDate 
FROM dbo.PurchaseOrders 
INNER JOIN dbo.Users 
    ON dbo.PurchaseOrders.UserID = dbo.Users.UserID 
INNER JOIN dbo.Deliveries 
    ON dbo.PurchaseOrders.PurchaseOrderID = dbo.Deliveries.PurchaseOrderID 
    AND dbo.Users.UserID = dbo.PurchaseOrders.UserID 
    AND dbo.Users.UserID = dbo.Deliveries.UserID 

答えて

3

。また、表の別名を使用することを学ぶ必要があります。

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 p.UserID = pu.UserID JOIN 
    dbo.Users du 
    ON d.UserId = du.UserId; 

あなたのクエリがあるため、この条件のレコードを返さない:

AND dbo.Users.UserID = dbo.PurchaseOrders.UserID 
    AND dbo.Users.UserID = dbo.Deliveries.UserID 

これは明らかにdbo.PurchaseOrders.UserID = dbo.Deliveries.UserIDことを意味します。したがって、これが真でない場合、条件に一致するレコードはありません。

1

内部結合を使用すると、データが一致しない場合、レコードは取得されません。 LEFT JOINを使用する必要があります。また、2番目の結合にはユーザーIDが必要です。以下のクエリを試してみてください。

SELECT 
dbo.Users.FirstName, 
    dbo.Users.LastName, 
    dbo.PurchaseOrders.PurchaseOrderDate, 
    dbo.Deliveries.ExpectedDeliveryDate, 
    dbo.Deliveries.ActualDeliveryDate 
FROM dbo.PurchaseOrders 
INNER JOIN dbo.Users 
    ON dbo.PurchaseOrders.UserID = dbo.Users.UserID 
LEFT JOIN dbo.Deliveries 
    ON dbo.PurchaseOrders.PurchaseOrderID = dbo.Deliveries.PurchaseOrderID 
関連する問題