I want to perform something like this
x
SELECT g.Name, g.emailID, g.phoneNo
FROM roomAllocation as ra
// if ra.guest_email is NOT NULL
LEFT JOIN Guests as g ON ra.guest_email = g.emailid
// else
LEFT JOIN Guests as g ON ra.guestPhoneNo = g.PhoneNo
Advertisement
Answer
If I understand correctly, you want to conditionally join to a table. I would recommend two left join
s as in:
select t1.*,
coalesce(ge.name, gp.name) as name
from table1 t1 left join
table2 ge
on t1.guest_email = ge.email_id left join
table2 gp
on t1.guest_phoneNo = gp.phoneNo and t1.guest_email is null;
Because it is the same table, you could also use or
in the on
clause:
select t1.*, g.*
from table1 t1 left join
table2 g
on t1.guest_email = geemail_id or
(t1.guest_phoneNo = g.phoneNo and t1.guest_email is null);
However, or
in an on
clause usually kills performance.