我有两张桌子:
+-------------------------+
| Domain |
+-------------------------+
| DomainID int |
| RegistryDate date |
+-------------------------+
和
+-------------------------+
| Annuity |
+-------------------------+
| AnnuityID int |
| DomainID int |
| Year smallint |
+-------------------------+
在每个表中,我都有这些注册表项:
Domain:
1 | mysite.com | 2014-02-10 |
2 | myecommerce.com | 2013-08-15 |
Annuity:
1 | 1 | 2014
2 | 1 | 2015
3 | 2 | 2013
4 | 2 | 2014
5 | 2 | 2015
我需要过滤今年(2016年)没有付费年金并已过期的域名。
示例:如果我今天(2016年6月9日)运行查询,我的查询结果应该过滤mysite.com
域,但不应过滤myecommerce.com
域,因为mysite.com
已于10月2日到期,2016年的年金未支付,而myecommerce.com
将于8月15日到期。
我正在使用MySQL。如何编写SQL查询?
谢谢!
答案 0 :(得分:0)
为此,您需要使用左外连接
SELECT d.id
FROM Domain d
LEFT OUTER JOIN Annuity a ON (d.id = a.DomainID AND a.Year = 2016)
WHERE a.id IS NULL
AND (MONTH(d.RegistryDate), DAY(d.RegistryDate)) < (MONTH(NOW()), DAY(NOW());
答案 1 :(得分:0)
实际上,这个查询是基于安德鲁的答案。我想发表评论,但我没有足够的代表。
SELECT * FROM Domain d LEFT OUTER JOIN Annuity a
ON (d.DomainID = a.DomainID AND a.Year = LEFT(CURRENT_DATE, 4))
WHERE a.DomainID IS NULL AND CONCAT(LEFT(CURRENT_DATE, 4), right(d.RegistryDate, 6)) > CURRENT_DATE;