2009-11-19 101 views
1

我有这个疑问,其完美的作品:故障与嵌套查询

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的值(最后一个嵌套查询里面)...

我该怎么办它?

谢谢。

+2

这是不可能的使用连接?你可以得到你需要的所有数据。 – 2009-11-19 12:21:57

回答

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 
0

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

+0

我该怎么做? – Oliver 2009-11-19 12:24:09

0

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

+0

那会怎样? – Oliver 2009-11-19 12:25:31

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' 
+0

感谢戴夫,但我可以得到它的工作... s.SCCode从哪里来? – Oliver 2009-11-19 12:44:28

+0

我的意思是*不能*让它工作...! – Oliver 2009-11-19 12:46:06

+0

这应该是c.SacCode,因为您是从内嵌查询中选择的,即没有加入到SacCode – davek 2009-11-19 12:54:01