嵌套查询的麻烦

时间:2009-11-19 12:16:41

标签: mysql

我的查询完美无缺:

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'
        )
    )
)

但是,我需要查看ClinDate的值(在最后一个嵌套查询中)...

我该怎么做?

感谢。

4 个答案:

答案 0 :(得分:1)

我使用连接重写查询。然后,您可以访问任何已连接表中的任何数据。

例如,您可以像这样重写您的查询:

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

答案 1 :(得分:0)

认为我在FROM语句中使用派生表而不是3个深层嵌套查询,将允许您访问值并且看起来会更好。

答案 2 :(得分:0)

您需要将子选项复制到FROM子句或使用JOIN重写查询。

答案 3 :(得分:0)

看起来应该是这样的:

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'