mysql - SQL - "merge" 3 tables with JOIN -


i want select users table depending 2 relation tables

the structure:

[user]  uid | firstname | lastname | ... --------------------------------- 482 | usera     | usera    | ... 885 | userb     | userb    | ... 405 | userc     | userc    | ... 385 | userd     | userd    | ...  [news_info]  uid_local   | uid_foreign -------------------------------- 125         | 482        100         | 405         [news_add]  uid_local   | uid_foreign -------------------------------- 125         | 885    105         | 385    

now want select usera , userb via uid_local -> 125, [news_info] , [news_add]

select    nnfo.uid_local,    user.*  user   join news_info nnfo     on nnfo.uid_foreign = user.uid nnfo.uid_local = 125  

result = usera // works

select    nadd.uid_local,   user.*  user   join news_add nadd     on nadd.uid_foreign = user.uid nadd.uid_local = 125 

result = userb // works

now "merge" sql statement one...to usera , userb

select    nnfo.uid_local,    nadd.uid_local,   user.*  user   join news_info nnfo     on nnfo.uid_foreign = user.uid   join news_add nadd     on nadd.uid_foreign = user.uid nnfo.uid_local = 125 , nadd.uid_local = 125 

result = empty // no errors.....

what wrong...i tryed other statements no result :(

when merging results of queries, there 2 different approaches:

  • union
  • joins

to know 1 choose have know whether there's technical link between tables in 2 queries wish merge. in case, there's functional link (nnfo.uid_local = 125 , nadd.uid_local = 125) it's not enough join these 2 universes. still could result 1 select, think final result unclear , somehow not in spirit of sql provides.

i'd go towards union solution:

select    nnfo.uid_local,    user.*  user   join news_info nnfo     on nnfo.uid_foreign = user.uid nnfo.uid_local = 125  union select    nadd.uid_local,   user.*  user   join news_add nadd     on nadd.uid_foreign = user.uid nadd.uid_local = 125 

edit: see davek's result implements union all instead of union. assumed wished return usera once if happened appear in both independant queries, that's why used simple union operator vs union all return duplicate results well.


Comments

Popular posts from this blog

html5 - What is breaking my page when printing? -

c# - must be a non-abstract type with a public parameterless constructor in redis -

ajax - PHP/JSON Login script (Twitter style) not setting sessions -