mysql performs slow with a subquery, its better to use sql without subquery
On 7/8/08, Lamp Lists <[EMAIL PROTECTED]> wrote: > > > > ----- Original Message ---- > From: John Hicks <[EMAIL PROTECTED]> > To: Lamp Lists <[EMAIL PROTECTED]> > Cc: mysql@lists.mysql.com > Sent: Tuesday, July 8, 2008 11:20:16 AM > Subject: Re: which query solution is better? > > Lamp Lists wrote: > > hi, > > I would like to get your opinions regarding which query you think is > better solution and, of course - why. > > I have (very simplified example) 3 tables: orders, members and addresses > > I need to show order info for specific order_id, > > solution 1: > > select ordered_by, order_date, payment_method, order_status > > > > from orders > > where order_id=123 > > select m.name, a.address, a.city, a.state, a.zip > > from members m, addresses a > > where m.member_id=$ordered_by and a.address_id=m.address_id > //$ordered_by is value from first query > > solution 2: > > select ordered_by, order_date, payment_method, order_status, (select > m.name, a.address, a.city, a.state, a.zip from members m, addresses a > where m.member_id=ordered_by and a.address_id=m.address_id) > > > > from orders > > where order_id=123 > > (queries are written without testing and maybe it doesn't work exactly, > but it's more to gave you the idea what I'm talking about :D) > > also,what if I have to list 20,50 or 100 orders instead one order? would > be subquery still be an option? > > thanks for any opinion. > > -ll > > > > I don't understand what syntax you're using for your second solution. > > Your first solution uses two separate queries which will accomplish the > task. > > They could be combined into a single query like this: > > select * from orders > left join members on member_id = ordered_by > left join addresses on addresses.address_id = members.address_id > where order_id = 123 > > -- john > > sorry john. my bad. I should test the query before I post it because it > doesn't work that way :D > > though, let me modify the question: > > solution 1: > select o.ordered_by, o.order_date, o.payment_method, o.order_status, > concat(m.first_name, ' ', m.last_name) name > left join members m on m.member_id=o.ordered_by > from orders o > where o.order_id=123 > > vs. > > select o.ordered_by, o.order_date, o.payment_method, o.order_status, > (select concat(first_name, ' ', last_name) name from members where > member_id=o.registered_by) name > from orders o > where o.order_id=123 > > in first solution there is join and in second subquery. what's better and > why? > > sorry for this mess :D > > -ll > > > >