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
Post a Comment