mysql - Is left join commutative? What are its properties? -


assume tables tablea tableb tablec , tabled:

is following query:

tablea inner join tableb left join tablec left join tabled 

(all joined id column) equivalent to:

tablea inner join tableb      inner join tablec      left join tabled      union    tablea inner join tableb     left join tablec on tableb.c_id null     left join tabled     

?

note:
or instead of union

tablea inner join tableb        inner join tablec         left join tabled   

and

tablea inner join tableb        left join tablec on tableb.c_id null        left join tabled     

and combine results

update

(a inner join b) left join c left join d  

the same as:

a inner join (b left join c) left join d 

?

wikipedia:

"in mathematics, binary operation commutative if changing order of operands not change result. fundamental property of many binary operations, , many mathematical proofs depend on it."

answer:

no, left join not commutative. , inner join is.

but that's not asking.

is following query:

tablea inner join tableb left join tablec left join tabled 

(all joined id column) equivalent to:

tablea inner join tableb        inner join tablec         left join tabled    union      tablea inner join tableb         left join tablec on tableb.c_id null         left join tabled     

answer:

also no. unions , joins don't accomplish same thing, speaking. in case may able write them equivalently, don't think general pseudo sql showing. on constitution seemslike should not work (maybe not know in mysql?)

here simplified set of queries think equivalent.

select *    tablea         left join         tableb b on a.id = b.id_a   select *    tablea         inner join         tableb b on a.id = b.id_a  union       select *    tablea          left join         tableb b on a.id = b.id_a   tableb.id null 

edit 2:

here's example closer in essence same.

select *               tablea         inner join tableb b on a.id = b.id_a          left join tablec c on b.id = c.id_b  

is same as

select *    tablea         inner join tableb b on a.id = b.id_a         inner join tablec c on b.id = c.id_b  union       select *    tablea          inner join tableb b on a.id = b.id_a          left join tablec c on b.id = c.id_b   tablec.id null 

but still don't think i'm answering real question.


Comments

Popular posts from this blog

apache - Remove .php and add trailing slash in url using htaccess not loading css -

javascript - jQuery show full size image on click -