我有两张表:
+-------------------------+
| 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已经在2月10日到期,2016年的年金没有支付,而myecommerce.com将在15月15日到期。
我使用的是MySQL。如何编写SQL查询?
谢谢!
发布于 2016-06-09 11:22:35
为此,您需要使用左外部连接
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());发布于 2016-06-09 11:57:06
实际上,这个查询是基于Andrew的回答的。我想把它贴在评论上,但我没有足够的代表。
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;https://stackoverflow.com/questions/37716115
复制相似问题