2012-07-15 24 views
0

我正在試圖做一個查詢,說If the customer has no invoice, but has an appointment in the last 6 months, please give me their clientId and name以下結果返回並設置爲空。使用sql查詢中存在兩種情況

SELECT clients.clientId, clients.studentFirstName, clients.studentLastName 
FROM clients, invoices, appointments 
WHERE (NOT EXISTS 
      (SELECT * 
      FROM invoices, clients 
      WHERE invoices.clientId = clients.clientId)) 
AND (EXISTS 
     (SELECT * FROM appointments, clients 
     WHERE appointments.clientId = invoices.clientId 
     AND appointments.date >= DATE_ADD(curdate(), INTERVAL 6 MONTH))); 

編輯:該結束了查詢工作是約翰的回答有點扭捏之後創建的:

SELECT a.clientID, 
    a.studentFirstName, 
    a.studentLastName 
FROM clients a 
     LEFT JOIN invoices b 
      on a.clientID = b.clientID 
     LEFT JOIN appointments c 
      on a.clientID = c.clientID 
WHERE b.clientId IS NULL AND 
    c.`date` >= DATE_SUB(curdate(), INTERVAL 6 MONTH) 

回答

3

使用LEFT JOIN代替。

SELECT a.ClientID, 
     a.studentFirstName, 
     a.clients.studentLastName 
FROM clients a 
      LEFT JOIN invoices b 
       on a.ClientID = b.ClientID 
      LEFT JOIN appointments c 
       on a.ClientID = c.ClientID 
WHERE b.Client IS NULL AND 
     c.`Date` >= DATE_SUB(curdate(), INTERVAL 6 MONTH) 
+0

這個腳本結束了一些調整... SELECT a.clientID, a.studentFirstName, a.studentLastName 來自客戶端的一個 LEFT JOIN發票b 上a.clientID = B工作.clientID LEFT JOIN上a.clientID = c.clientID 約會ç WHERE b.clientId IS NULL AND c.'Date'> = DATE_SUB(CURDATE(),INTERVAL 6個月)...我也將包括此在原始文章中正確的形式。 – radleybobins 2012-07-15 02:42:44

+0

哦,這是一個錯字錯誤..我的意思是'A'而不是'C' – 2012-07-15 02:43:10

+0

非常感謝您的幫助!我會在3分鐘內將此標記爲正確。 – radleybobins 2012-07-15 02:43:31

0

你確定它應該是DATE_ADD而不是DATE_SUB?

您可以使用聯接:

SELECT a.clientId, 
      a.studentFirstName, 
      a.studentLastName 
FROM  clients a 
JOIN  appointments b ON a.clientId = b.clientId 
      AND b.date >= CURDATE() - INTERVAL 6 MONTH 
LEFT JOIN invoices c ON a.clientId = c.clientId 
WHERE  c.clientId IS NULL 
+0

哇,這是一個明顯更好的方式來做到這一點比我...我甚至沒有考慮使用連接,即使它可能應該是我去的方法。該查詢還返回了一個空集,但在我們兩個之間,我想知道數據庫中是否沒有這樣的條目。我要去手動搜索一個,然後我會回報。 – radleybobins 2012-07-15 02:38:14

+0

我已經多次使用DATE_ADD進行其他查詢,所以這可能不是問題 – radleybobins 2012-07-15 02:39:34

+0

@radleybobins,您是否想要檢索***在*** *** ***中有約會的客戶端幾個月或在***未來***六個月內預約? – 2012-07-15 02:39:45