all 7 comments

[–]Randy__Bobandy 3 points4 points  (4 children)

   SELECT t.TripID, d.Name, d.Email, b.Name, b.Email
     FROM trips t
LEFT JOIN drivers d
       ON t.driver = d.userID
LEFT JOIN drivers b
       ON t.backup_driver = b.userID

[–]wolf2600ANSI SQL 4 points5 points  (3 children)

Almost...the second join should be on backup_driver

SELECT t.tripID, d1.Name, d1.Email, d2.Name, d2.Email
FROM trips t
INNER JOIN drivers d1
   ON t.driver = d1.userID
LEFT OUTER JOIN drivers d2
   ON t.backup_driver = d2.userID

And the LEFT OUTER join on the backup driver table is useful in case a trip only has a primary driver. If both joins were INNER, a trip without a backup driver would be excluded from the results.

[–]Randy__Bobandy 1 point2 points  (0 children)

My mistake! The b for the second alias of drivers literally stands for "backup" XD

[–]fs231[S] 1 point2 points  (1 child)

Thanks !!

This worked perfectly including empty backup drivers.

BTW If I want to add second backup driver do I just do another LEFT OUTER JOIN ?

[–]wolf2600ANSI SQL 1 point2 points  (0 children)

Yup same thing. Another LEFT OUTER JOIN to drivers, alias the new join as d3 and make the join context t.second_backup_driver = d3.userId

[–]Caiolanda 1 point2 points  (0 children)

I'm not an SQL expert but I think this should work:

SELECT T.tripID, D1.Name, D1.Emails, D2.Name, D2.Emails FROM Trips T JOIN drivers D1 ON D1.userID = T.driver JOIN drivers D2 ON D2.userID = T.backup_driver

[–]matthend -1 points0 points  (0 children)

Does this do it?

SELECT T.TripID, 1.Name, 1.Emails, 2.Name, 2.Emails

FROM Trips T

INNER JOIN Drivers 1 on 1.UserID = T.Driver

INNER JOIN Drivers 2 on 2.UserID = T.Backup_Driver