Solved

Using alternative to LIMIT command and using INNER JOIN in MS SQL Query

Posted on 2006-07-06
9
1,849 Views
Last Modified: 2008-01-09
Hi,

I have the follwoing SQL:

SELECT     a.ContactID, a.CompanyID, a.ContactPrefix, a.ContactFName, a.ContactLName, a.ContactSurfix, a.ContactJobTitle, a.ContactPhone, a.ContactEmail,
                      b.CompanyName, b.CompanyPhone, b.CompanySegment, a.ContactMobile, a.ContactCustRelat, a.ContactAccntMng, a.ContactNotes,
                      b.CompanyFascimile, b.CompanyWeb, a.ContactRcdMng
FROM         Contact a INNER JOIN
                      Company b ON a.CompanyID = b.CompanyID
WHERE     (b.CompanySegment LIKE 'Finance') AND (a.ContactRemoved IS NULL) AND (b.CompanyRemoved IS NULL)
ORDER BY a.ContactID

This works fine but I also want to add a 'LIMIT' function.

I have the following code which performs the alternative to MySQL LIMIT command.

SELECT     contactid, contactlname
FROM         (SELECT     TOP 15 contactid, contactlname
                       FROM          (SELECT     TOP 45 contactid, contactlname
                                               FROM          contact
                                               ORDER BY contactid ASC) AS newtbl
                       ORDER BY contactid DESC) newtbl2
ORDER BY contactid

I need to use get the LIMIT capability of the second query into the first.

The reason for this is that I am using AJAX to call SQL lines on demand.

Any help would be really appreciated.

Thank you,

SC69

0
Comment
Question by:Stormchild69
  • 2
  • 2
  • 2
9 Comments
 
LVL 25

Expert Comment

by:dstanley9
ID: 17052172
How about this (not optimized):

SELECT     a.ContactID, a.CompanyID, a.ContactPrefix, a.ContactFName, a.ContactLName, a.ContactSurfix, a.ContactJobTitle, a.ContactPhone, a.ContactEmail,
                      b.CompanyName, b.CompanyPhone, b.CompanySegment, a.ContactMobile, a.ContactCustRelat, a.ContactAccntMng, a.ContactNotes,
                      b.CompanyFascimile, b.CompanyWeb, a.ContactRcdMng
FROM         Contact a INNER JOIN
                      Company b ON a.CompanyID = b.CompanyID
WHERE     (b.CompanySegment LIKE 'Finance') AND (a.ContactRemoved IS NULL) AND (b.CompanyRemoved IS NULL)
AND a.ContactID IN
 (SELECT     TOP 15 contactid
                       FROM          (SELECT     TOP 45 contactid
                                               FROM          contact
                                               ORDER BY contactid ASC)
                       ORDER BY contactid DESC)
ORDER BY a.ContactID
0
 

Author Comment

by:Stormchild69
ID: 17053439
Hello,

Many thanks but I got an error on line 11 (second ORDER from the bottom). I added bach 'AS newtbl' and it ran but produced a mess of duplicated contactids. Contactid is unique in that there should only be one per contact and I would hope that contactid 30-45 would be displayed. This is what I tried

SELECT     a.ContactID, a.CompanyID, a.ContactPrefix, a.ContactFName, a.ContactLName, a.ContactSurfix, a.ContactJobTitle, a.ContactPhone, a.ContactEmail,
                      b.CompanyName, b.CompanyPhone, b.CompanySegment, a.ContactMobile, a.ContactCustRelat, a.ContactAccntMng, a.ContactNotes,
                      b.CompanyFascimile, b.CompanyWeb, a.ContactRcdMng
FROM         Contact a INNER JOIN
                      Company b ON a.CompanyID = b.CompanyID
WHERE     (b.CompanySegment LIKE 'Finance') AND (a.ContactRemoved IS NULL) AND (b.CompanyRemoved IS NULL) AND (a.ContactID IN
                          (SELECT     TOP 15 a.contactid
                            FROM          (SELECT     TOP 45 a.contactid
                                                    FROM          contact a
                                                    ORDER BY a.contactid ASC) AS newtbl
                            ORDER BY a.contactid DESC))
ORDER BY a.ContactID


Many thanks for trying,

SC69
0
 
LVL 25

Accepted Solution

by:
dstanley9 earned 500 total points
ID: 17053745
I think I see the problem.  I think reusing the "a" prefix in the subquery was messing it up.  Try

SELECT     a.ContactID, a.CompanyID, a.ContactPrefix, a.ContactFName, a.ContactLName, a.ContactSurfix, a.ContactJobTitle, a.ContactPhone, a.ContactEmail,
                      b.CompanyName, b.CompanyPhone, b.CompanySegment, a.ContactMobile, a.ContactCustRelat, a.ContactAccntMng, a.ContactNotes,
                      b.CompanyFascimile, b.CompanyWeb, a.ContactRcdMng
FROM         Contact a INNER JOIN
                      Company b ON a.CompanyID = b.CompanyID
WHERE     (b.CompanySegment LIKE 'Finance') AND (a.ContactRemoved IS NULL) AND (b.CompanyRemoved IS NULL) AND (a.ContactID IN
                          (SELECT     TOP 15 contactid
                            FROM          (SELECT     TOP 45 contactid
                                                    FROM          contact
                                                    ORDER BY contactid ASC)
                            ORDER BY contactid DESC))
ORDER BY a.ContactID
0
IT, Stop Being Called Into Every Meeting

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

 
LVL 75

Expert Comment

by:Anthony Perkins
ID: 17054771
Is this SQL Server 2005?
0
 

Author Comment

by:Stormchild69
ID: 17057666
Hi,

I am running SQL Server 2000.

Thank you for your help.

I added 'AS newtbl' and then your solution worked as required,

Thanks,

SC69
0
 
LVL 75

Expert Comment

by:Anthony Perkins
ID: 17058257
While I appreciate the points, you appear to have awarded me in error.  See here:

I accepted the wrong answer. Now what?
http://www.experts-exchange.com/Databases/Microsoft_SQL_Server/help.jsp#hi17
0

Featured Post

IT, Stop Being Called Into Every Meeting

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

Join & Write a Comment

Suggested Solutions

Introduction In my previous article (http://www.experts-exchange.com/Microsoft/Development/MS-SQL-Server/SSIS/A_9150-Loading-XML-Using-SSIS.html) I showed you how the XML Source component can be used to load XML files into a SQL Server database, us…
This article explains how to reset the password of the sa account on a Microsoft SQL Server.  The steps in this article work in SQL 2005, 2008, 2008 R2, 2012, 2014 and 2016.
Using examples as well as descriptions, and references to Books Online, show the different Recovery Models available in SQL Server and explain, as well as show how full, differential and transaction log backups are performed
This videos aims to give the viewer a basic demonstration of how a user can query current session information by using the SYS_CONTEXT function

708 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

20 Experts available now in Live!

Get 1:1 Help Now