Why not use and INNER or LEFT join instead of a subquery? Typically that
will be faster. Also, if the data set from either table is large I would
recommend indexes on the tables.
--
Charles Haines
Senior Code Monkey
P: (410) 535-5590 x1196
Recorded Books, LLC
http://www.recordedbooks.com
"Theory is when you know something, but it doesn't work. Practice is when
something works, but you don't know why. Programmers combine theory and
practice: Nothing works and they don't know why."
On Wed, Sep 28, 2011 at 12:41 PM, Ken Irwin <[log in to unmask]> wrote:
> Hi all,
>
> I've not done much with MySQL subqueries, and I'm trying right now with
> what I find to be surprising results. I wonder if someone can help me
> understand.
>
> I have a pile of data that with columns for "institution" and "date".
> Institution gets repeated a lot, with many different dates. I want to select
> all the institutions that *only* have dates after July 1 and don't appear in
> the table before that. My solution was to do a first query for all the
> institutions that DO have dates before July 1
> SELECT distinct institution FROM `renewals` WHERE snap_date < '2011-07-01'
>
> And then to do a SELECT query on all the institutions:
> SELECT distinct institution from renewals
>
> And then try to do a NOT IN subquery subtracting the smaller query from the
> larger one:
>
> SELECT distinct institution from renewals
> WHERE institution not in
> (SELECT distinct institution FROM `renewals` WHERE snap_date <
> '2011-07-01')
>
> ...only it doesn't seem to work. Or rather, the query has been running for
> several minutes and never comes back with an answer. Each of these two
> queries takes just a few milliseconds to run on its own.
>
> Can someone tell me (a) am I just formatting the query wrong, (b) do
> subqueries like this just take forever, and/or (c) is there a better way to
> do this? (I don't really understand about JOIN queries, but from what I can
> tell they are only for mixing the results of two different tables so I think
> they might not apply here.)
>
> Any advice would be most welcome.
>
> Thanks
> Ken
>
|