一开始我需要处理一个简单的情况作为入口控制:
表A:
编号 |姓名 |日期
11 |姓名 | 2017-01-01
12 |姓名 | 2017-01-01
13 |姓名 | 2017-01-01
23 |姓名 | 2017-01-01
表 B:
编号 |开始日期 |结束日期
11 | 2017-01-01 | 2017-01-31
12 | 2017-02-01 | 2017-02-15
13 | 2017-01-01 | 2017-01-31
==========================================
我应该找到可以在 begin_date 和 end_date 之间的人:
我的初始查询是:
select a.id from tmp.a join tmp.b on a.id=b.id and (a.date between b.begin_date and b.end_date);
它应该返回 id 11 和 13,这是正确的。
但是后来我的老板告诉我,id 23 也应该进入,因为它不在表 B 中,所以 begin_date 和 end_date 没有限制。
有什么方法可以修改我的查询,使查询也可以返回 id 23?
一个普遍的问题是如何在以下情况下“加入”:当记录存在时,执行具有特定条件的内连接,当它不存在时,执行左连接。
谢谢。
最佳答案
请进行以下更改:
select id from A left join B on ((A.id=B.id and (A.entry_date between B.begin_date and end_date)) or B.begin_date IS NULL)
- 使用左连接
- 还有一个或条件,即 B.begin_date IS NULL
关于mysql - 在这种情况下如何编写连接查询 : 1 if not exist, 不是限制 2 如果存在,则必须在这些时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43579221/