2009-11-19 59 views
1

我有這個疑問,其完美的作品:使用連接在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的值(最後一個嵌套查詢內),所以我已經告訴我需要返工使用連接查詢。

我不知道怎麼樣,有人可以幫忙嗎?

謝謝。

+0

提供這種解決方案的任何從您發佈的查詢返回不同的結果,因爲你使用'*'。你應該完全避免這個原因,並列舉你感興趣的所有領域。 – 2009-11-19 12:58:48

回答

6

這裏是一個開始:

SELECT  * 
FROM  Customer c 
INNER JOIN CustAppointments ca ON ca.CxId = c.CustomerID 
INNER JOIN ClinicRooms cr ON cr.AppRoomID = ca.AppRoomID 
INNER JOIN AppClinics ac ON ac.ClinID = cr.ClinID 
WHERE  ap.ClinDate BETWEEN '20090101' AND '20091119' 
AND  SacCode IN (SELECT sc.SacCode 
         FROM SacCode sc 
         WHERE sc.ResellerCorporateID = 392) 

這將允許您從AppClinics選擇列。

+0

它會爲客戶返回多個記錄,並且在連接中有多個匹配項。但是,如果有許多符合數據標準的約會,這可能就是我們想要的。原來的查詢只返回每個客戶一條記錄 – kristof 2009-11-19 12:55:53

+0

精彩的解決方案。很高興看到(不)他們在表格中使用了'CustomerID',在另一個表格中使用了'CxId'。 – 2009-11-19 13:00:55

+0

您必須提交分組規則,或者在業務級別處理它,如果您希望它返回單個客戶價值。 – 2009-11-19 13:07:06