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 [email protected]
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
-~----------~----~----~----~------~----~------~--~---