2016-07-15 3 views
0

Hallo ich mache Schema für Kaufaufträge diese Aufträge können von bestimmten Benutzer bestellt werden und dann von einem anderen Benutzer erhalten.Abrufen von Datensätzen aus mehreren Tabellen Ausgabe

Das Problem liegt vor, wenn der Benutzer-ID-Wert in der Deliveries-Tabelle null ist und die Abfrage keine Datensätze zurückgibt.

UserID-Wert ist null, weil die Bestellung noch nicht übermittelt wurde.

Abfrage

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; 

Schema

enter image description here

+0

Setzen Sie also eine Bedingung WHERE UserID ist nicht NULL. Oder wenn Sie sie einschließen möchten, können Sie tun, wo Benutzer-ID null ist. Sie müssen Ihren Join auch zu einem linken Join ändern, wenn Sie den Datensatz weiterhin verwenden möchten. – JonH

+0

Wird ein 'left join' auf den' Deliveries' den Trick machen? –

Antwort

3

Wahrscheinlich haben Sie eine LEFT JOIN brauchen hier. Ein wenig Formatierung macht es viel einfacher zu lesen. Sie können sich diesen Artikel ansehen, um die verschiedenen Arten von Joins zu verstehen. 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;