On Feb 11, 2008 12:02 AM, Tim Chase <[EMAIL PROTECTED]> wrote:
> >>    offers = Offer.objects.all()
> >>    for term in ('ThemePark', 'London'):
> >>      offers = offers.extra(where=["""
> >>        EXISTS (
> >>          SELECT 0
> >>          FROM app_offer_term ot
> >>            ON o.id = ot.offer_id
> >>            INNER JOIN app_term t
> >>            ON ot.term_id = t.id
> >>          WHERE app_offer.id = ot.offer_id
> >>            AND t.term = %s
> >>        )"""], params=[term])
> >>
> >
> > please, could someone explain to me:
> > - what does "SELECT 0" do?
>
> "SELECT 0" just returns *something*.  The EXISTS clause only
> cares if any *rows* were returned, not what their content was.
> It could just as easily have been "SELECT *" or "SELECT
> 'frobniculator'" or anything else.  However, if the database
> doesn't optimize the call, anything more than one column and
> anything requiring a lookup into a table (such as a column value)
> is extra effort/cycles.  Thus, "SELECT 0" is a suggestion to the
> database that if it has to bring something back, a single
> non-calculated common constant will suffice.  A minor
> optimization, and I find it helpful as a reminder to myself that
> I don't really care about the contents of the the SELECT
> statement, just that *something* came back.
>
> > - and "ON o.id = ot.offer_id"? Is it needed?
>
> Hmm...looks like a bogus copy&paste on my part; a remnant of my
> testing.  With that line, it's bad SQL.  It should just be
>
>   ...
>   FROM app_offer_term ot
>     INNER JOIN app_term t
>     ON ot.term_id = t.id
>   ...
>
> -tim
> PS:  you sent your reply directly to me, rather than to the
> mailing list.  In this case, I could answer your question, but in
> general, you may want to reply to the list so that others can
> help too as it's pretty easy to hit the limits of my answers. :)
> I've replied CC'ing the ML so that in case others have the same
> questions you did, they can benefit from the answers too.
>
>

Thank you very much for the explanation!
I apologize for not sending this to the list as well, this was not intentional.

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-users@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to