2012-07-15 21 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