Want to win a PS4? Go Premium and enter to win our High-Tech Treats giveaway. Enter to Win

x
?
Solved

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

Posted on 2006-07-06
9
Medium Priority
?
1,879 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 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 2000 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
Concerto's Cloud Advisory Services

Want to avoid the missteps to gaining all the benefits of the cloud? Learn more about the different assessment options from our Cloud Advisory team.

 
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

Veeam Disaster Recovery in Microsoft Azure

Veeam PN for Microsoft Azure is a FREE solution designed to simplify and automate the setup of a DR site in Microsoft Azure using lightweight software-defined networking. It reduces the complexity of VPN deployments and is designed for businesses of ALL sizes.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Ever needed a SQL 2008 Database replicated/mirrored/log shipped on another server but you can't take the downtime inflicted by initial snapshot or disconnect while T-logs are restored or mirror applied? You can use SQL Server Initialize from Backup…
It is possible to export the data of a SQL Table in SSMS and generate INSERT statements. It's neatly tucked away in the generate scripts option of a database.
Using examples as well as descriptions, and references to Books Online, show the documentation available for date manipulation functions and by using a select few of these functions, show how date based data can be manipulated with these functions.
Via a live example, show how to extract insert data into a SQL Server database table using the Import/Export option and Bulk Insert.

618 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