有没有人对如何解决此查询有任何想法?
有一个包含客户的表和一个包含许可证的表。每个客户可以有多个许可证在不同时间到期,一些已经过期而另一些尚未过期。如果我想选择至少有一个有效许可证的所有客户,我会这样做:
SELECT * FROM License
LEFT JOIN Customer USING (customer_id)
GROUP BY Customer.customer_id
HAVING License.expiry > NOW()
但是,如何获得仅过期许可证的客户?如果我“执行License.expiry< NOW()”,它会发现许可证已过期的客户,但它不会排除同时拥有有效许可证的客户。我需要选择只有过期许可证的客户。
“没有”会解决问题,但没有这样的事情......
任何帮助将不胜感激。
答案 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))