mysql - Why SQL error "unknown column" in JOIN query? -


i'm querying 3 tables using join , need use twice same table. i'm getting "unknown column" error message. have tried various ways using aliases can't resolve problem. ideas?

select distinct jos_easypaypalbuttons_ipn.atendente      , jos_easypaypalbuttons_ipn.btn_name      , pagseguro.atendente      , pagseguro.produto    jos_easypaypalbuttons_ipn, pagseguro  inner join produtos pp on jos_easypaypalbuttons_ipn.btn_name = pp.cod_produto  inner join produtos ps on pagseguro.produto = ps.cod_produto  jos_easypaypalbuttons_ipn.payer_email = '$email'      or pagseguro.email = '$email'     , pp.modo_consulta = 'imediata'      or ps.modo_consulta = 'imediata' 

messsage:

unknown column 'jos_easypaypalbuttons_ipn.btn_name' in 'on clause'

structure of tables:

create table produtos  (     id int auto_increment primary key,      produto varchar(20),      modo_consulta varchar(30)     );  create table jos_easypaypalbuttons_ipn  (     id int auto_increment primary key,      btn_name varchar(20),      atendente varchar(30),     payer_email varchar(50)     );  create table pagseguro  (     id int auto_increment primary key,      produto varchar(20),      atendente varchar(30),     email varchar(50)     ); 

sample data:

    insert produtos     (modo_consulta, produto)     values     ('imediata', 'br0120'),     ('imediata', 'br0130');      insert jos_easypaypalbuttons_ipn     (atendente, btn_name, payer_email)     values     ('sibila', 'br0120', 'me@lettura.com'),     ('lua', 'br0130', 'me@lettura.com');      insert pagseguro     (atendente, produto, email)     values     ('patricia', 'br0120', 'me@lettura.com'),     ('lua', 'br0130', 'me@lettura.com'); 

update. desired output unique row atendente 2 tables pagseguro , jos_easypaypalbuttons when matching table produtos.mod_consulta 'imediata':

atendente   btn_name produto  mod_consulta ----------------------------------------- sibila      br0120            imediata    lua         br0130            imediata patricia             br0120   imediata 

from intended output, conclude want full join (and/or union) of 2 tables {jos_easypaypalbuttons_ipn, pagseguro}. (and add decoration produtos, too)

select distinct two.atendente      , two.btn_name      , two.produto      , pp.modo_consulta   (         select  coalesce(ipb.atendente, pgs.atendente) atendente         , coalesce(ipb.btn_name,pgs.produto) zzz         , coalesce(ipb.payer_email,pgs.email) payer_email         , ipb.btn_name btn_name         , pgs.produto produto         jos_easypaypalbuttons_ipn ipb         full join pagseguro pgs on pgs.atendente = ipb.atendente                                  , pgs.produto = ipb.btn_name         ) 2  join produtos pp on pp.produto = two.zzz  two.payer_email = 'me@lettura.com'    , pp.modo_consulta = 'imediata'         ; 

the same can accomplished putting full join subquery cte:

with 2 (         select  coalesce(ipb.atendente, pgs.atendente) atendente         , coalesce(ipb.btn_name,pgs.produto) zzz         , coalesce(ipb.payer_email,pgs.email) payer_email         , ipb.btn_name btn_name         , pgs.produto produto         jos_easypaypalbuttons_ipn ipb         full join pagseguro pgs on pgs.atendente = ipb.atendente                         , pgs.produto = ipb.btn_name         ) select distinct two.atendente      , two.btn_name      , two.produto         , pp.modo_consulta  2  join produtos pp on pp.produto = two.zzz  two.payer_email = 'me@lettura.com'    , pp.modo_consulta = 'imediata'         ; 

the result:

 atendente | btn_name | produto | modo_consulta  -----------+----------+---------+---------------  lua       | br0130   | br0130  | imediata  sibila    | br0120   |         | imediata  patricia  |          | br0120  | imediata (3 rows) 

update xxx: avoiding full join using union. (ymmv. sigh)

select distinct two.atendente      , two.btn_name      , two.produto         , pp.modo_consulta    (          select  coalesce(ipb.atendente, pgs.atendente) atendente         , coalesce(ipb.btn_name,pgs.produto) zzz         , coalesce(ipb.payer_email,pgs.email) payer_email         , ipb.btn_name btn_name         , pgs.produto produto         (                 select aa.atendente atendente                         ,aa.produto zzz                 pagseguro aa                 union                 select bb.atendente atendente                         ,bb.btn_name zzz                 jos_easypaypalbuttons_ipn bb                 ) uu         left join pagseguro pgs on pgs.atendente = uu.atendente                         , pgs.produto = uu.zzz         left join jos_easypaypalbuttons_ipn ipb on ipb.atendente = uu.atendente                         , ipb.btn_name = uu.zzz         ) 2  join produtos pp on pp.produto = two.zzz  two.payer_email = 'me@lettura.com'    , pp.modo_consulta = 'imediata'         ; 

aftermath: note {jos_easypaypalbuttons_ipn, pagseguro} isomorphic. lot of complexity avoided combining these 2 tables, maybe adding indicator/typetag field. adagium: the need union (often) indicates data-modelling problem


Comments

Popular posts from this blog

linux - xterm copying to CLIPBOARD using copy-selection causes automatic updating of CLIPBOARD upon mouse selection -

c++ - qgraphicsview horizontal scrolling always has a vertical delta -