tags:

views:

50

answers:

2

I have a few tables:

event_type (et), event (e), event_booking (eb), person (p), person_address (p) and address_country (ac)

They are joined like so:

et <- e <- eb -> p -> pa -> ac

Every join has a one-to-one relationship, except the eb -> p link. A row in eb can have a null instead of an id from p.

I want to get all bookings, regardless of whether there's a corresponding row in p.

So, a simple left join.

but which would be better? (or is there a better way?)

et J e J eb LJ p LJ pa LJ ac (I'm assuming this would be treated identically to ac J pa J p RJ eb RJ e RJ et?)

or

et J e J eb LJ (p J pa J ac) (i.e. left join a sub-select)

+1  A: 

Just test your queries using EXPLAIN, it will show if and how keys are used.

mvds
+1  A: 

I usually use the following syntax - which somehow corresponds to your second scenario

select
    *
from 
    eb
    inner join e on eb.eId = e.eId
    inner join et on e.etId = et.etId
    left join p
           inner join pa on p.paId = pa.paId
           inner join ac on pa.acId = ac.acId
        on eb.pId = p.pId

I am not sure about the performance implications but I would not be surprised if both scenarios generated the same query plan

kristof
Thanks Kristof, I think that'll be ideal. Strange syntax I've not really used before!
aidan