1

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

有一张有客户的桌子和一张有许可证的桌子。每个客户可以拥有多个在不同时间到期的许可证,有些已经过期,有些还没有。如果我想选择至少拥有一个有效许可证的所有客户,我会:

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

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

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

任何帮助将不胜感激。

4

1 回答 1

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))
于 2013-02-07T12:20:39.687 回答