Mysql - 微调HAVING

时间:2013-02-07 12:15:06

标签: mysql

有没有人对如何解决此查询有任何想法?

有一个包含客户的表和一个包含许可证的表。每个客户可以有多个许可证在不同时间到期,一些已经过期而另一些尚未过期。如果我想选择至少有一个有效许可证的所有客户,我会这样做:

SELECT * FROM License
LEFT JOIN Customer USING (customer_id)
GROUP BY Customer.customer_id
HAVING License.expiry > NOW()

但是,如何获得仅过期许可证的客户?如果我“执行License.expiry< NOW()”,它会发现许可证已过期的客户,但它不会排除同时拥有有效许可证的客户。我需要选择只有过期许可证的客户。

“没有”会解决问题,但没有这样的事情......

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

尝试此查询 -

SELECT * FROM License
  LEFT JOIN Customer USING (customer_id)
GROUP BY
  Customer.customer_id
HAVING
  COUNT(*) > 0 AND COUNT(*) = COUNT(IF(License.expiry > NOW(), 1, NULL))