В начале мне нужно обработать простую ситуацию в качестве контроля входа:
таблица А:
идентификатор | имя | свидание
11 | имя | 2017-01-01
12 | имя | 2017-01-01
13 | имя | 2017-01-01
23 | имя | 2017-01-01
таблица Б:
идентификатор | дата_начала | Дата окончания
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);
и он должен вернуть идентификаторы 11 и 13, что правильно.
Но затем мой босс сказал мне, что идентификатор 23 также должен попасть, поскольку его нет в таблице B, поэтому нет ограничений в begin_date и end_date.
Могу ли я каким-либо образом изменить свой запрос, чтобы запрос также мог возвращать идентификатор 23?
Общий вопрос будет заключаться в том, как «присоединиться» в ситуации, когда: когда запись существует, выполнить внутреннее соединение с определенными условиями, когда она не существует, выполнить как левое соединение.
Спасибо.