Re: Best method to SELECT TOP n TO m of a table

From: Mikito Harakiri <mikharakiri_at_iahu.com>
Date: Tue, 4 Nov 2003 10:48:37 -0800
Message-ID: <zFSpb.19$S23.294_at_news.oracle.com>


"Will Clark" <reply_only_to_newsgroup_please_at_noone-lives-here.com> wrote in message news:bo8qio$4ri$1_at_sparta.btinternet.com...
> > Could you please post that more complicated query?
>
> The more complicated query just has lots of WHERE qualifiers...
>
> SELECT * FROM tblOne WHERE id IN
> (SELECT TOP 3 id FROM tblTwo WHERE
> id NOT IN (SELECT TOP 5 id FROM tblTwo WHERE
> fieldA = 'value' AND
> fieldB = 'value' AND
> (fieldC = 'value' OR fieldD =
> 'value')
> ORDER BY id) AND
> fieldA = 'value' AND
> fieldB = 'value' AND
> (fieldC = 'value' OR fieldD = 'value')
>
> ORDER BY id)
>
> AND (flags = 'A' OR flags = 'B')

You can unnest the innermost subquery. Your second level nested subquery

 SELECT TOP 3 id FROM tblTwo WHERE

         id NOT IN (SELECT TOP 5 id FROM tblTwo WHERE
                                         fieldA = 'value' AND
                                         fieldB = 'value' AND
                                         (fieldC = 'value' OR fieldD =
'value')
                         ORDER BY id) AND
         fieldA = 'value' AND
         fieldB = 'value' AND
         (fieldC = 'value' OR fieldD = 'value')
     ORDER BY id

becomes

SELECT TOP 3 id FROM

      (SELECT TOP 5+3 id FROM tblTwo WHERE
                                         fieldA = 'value' AND
                                         fieldB = 'value' AND
                                         (fieldC = 'value' OR fieldD =
'value')
                         ORDER BY id)

ORDER BY id DESC
Received on Tue Nov 04 2003 - 19:48:37 CET

Original text of this message