开发者

Troubles with nested queries

I have this query which works perfectly:

SELECT *
FROM Customer
WHERE SacCode IN
(
    SELECT SacCode
    FROM SacCode
    WHERE ResellerCorporateID = 392
    ORDER BY SacCode
)
AND CustomerID IN
(
    SELECT CxID
    FROM CustAppointments
    WHERE AppRoomID IN
    (
        SELECT AppRoomID
        FROM ClinicRooms
        WHERE ClinID IN
        (
            SELECT ClinID
            FROM AppClinics
            WHERE ClinDate >='20090101'
            AND ClinDate <='20091119'
        )
    )
)开发者_Go百科

However, I need to see the value of ClinDate (inside the last nested query)...

How do I do it?

Thanks.


I'd rewrite the query using joins. Then, you can access any data from any of the joined tables.

For example, you could rewrite your query like this:

SELECT c.*, ac.ClinDate
FROM Customer c
  JOIN SacCode sc ON sc.SacCode = c.SacCode
  JOIN CustAppointments ca ON ca.CustomerID = c.CustomerID
  JOIN ClinicRooms cr ON cr.AppRoomID = ca.AppRoomID
  JOIN AppClinic ac ON ac.ClinID = cr.ClinID
WHERE ac.ClinDate >='20090101'
  AND ac.ClinDate <='20091119'
  AND sc.ResellerCorporateID = 392


Think I'd use derived table in the FROM statement rather than 3 deep nested query, will allow you to access values and will look a LOT better.


You'll need to copy the subselects to the FROM clause or rewrite the query using JOINs.


it should look something like this:

SELECT c.*, a.ClinDate

FROM Customer c

inner join CustAppointments ca
inner join ClinicRooms cr
inner join AppClinics a

where c.SacCode IN
(
    SELECT SacCode
    FROM SacCode
    WHERE ResellerCorporateID = 392
    ORDER BY SacCode
)

and c.CustomerID = ca.CxID
and ca.AppRoomID = cr.AppRoomID
and cr.ClinID = a.ClinID

and a.ClinDate >='20090101' 
and a.ClinDate <='20091119'
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜