首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >选择其他表中不包含具体数据的数据

选择其他表中不包含具体数据的数据
EN

Stack Overflow用户
提问于 2016-06-09 11:03:43
回答 2查看 35关注 0票数 0

我有两张表:

代码语言:javascript
复制
+-------------------------+
| Domain                  |
+-------------------------+
| DomainID       int      |
| RegistryDate   date     |
+-------------------------+

代码语言:javascript
复制
+-------------------------+
| Annuity                 |
+-------------------------+
| AnnuityID      int      |
| DomainID       int      |
| Year           smallint |
+-------------------------+

在每个表中,我都有以下注册表项:

代码语言:javascript
复制
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查询?

谢谢!

EN

回答 2

Stack Overflow用户

发布于 2016-06-09 11:22:35

为此,您需要使用左外部连接

代码语言:javascript
复制
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());
票数 0
EN

Stack Overflow用户

发布于 2016-06-09 11:57:06

实际上,这个查询是基于Andrew的回答的。我想把它贴在评论上,但我没有足够的代表。

代码语言:javascript
复制
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;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37716115

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档