Я создаю полное внешнее объединение с предложением where. Однако он может генерировать только результат внутреннего соединения. Я подозреваю, что это связано с предложением where, но мне это нужно, когда условие добавляется. Итак, как мне создать запрос, удовлетворяющий обеим потребностям (как условию where, так и полному внешнему соединению)? Вот мой запрос.
select
t1.key1 as key1_1
, t1.key2 as key2_1
, t1.key3 as key3_1
, t1.date as date_1
, t1.v1
, t2.key1 as key1_2
, t2.key2 as key2_2
, t2.key3 as key3_2
, t2.date as date_2
, t2.v2
from t1
full outer join t2
on t1.key1 = t2.key1 and t1.key2 = t2.key2 and t1.key3 = t2.key3
where datediff(t1.date, t2.date) between -5 and 5
;
Пример данных
t1
key1 key2 key3 date v1
A1 B1 C1 2015-01-01 10
A1 B2 C2 2015-01-01 11
t2
key1 key2 key3 date v2
A1 B1 C1 2015-01-01 20
A1 B1 C1 2015-01-03 30
A1 B1 C1 2015-02-01 40
A1 B1 C1 50
A1 B1 C2 2015-01-02 60
Желаемый результат
key1_1 key2_1 key3_1 date_1 v1 key1_2 key2_2 key3_2 date_2 v2
A1 B1 C1 2015-01-01 10 A1 B1 C1 2015-01-01 20
A1 B1 C1 2015-01-01 10 A1 B1 C1 2015-01-03 30
A1 B1 C1 2015-02-01 40
A1 B1 C1 50
A1 B1 C2 2015-01-02 60
A1 B2 C2 2015-01-01 11
Это все сценарии ios, которые я могу представить себе как сейчас же. Я могу добавить, если найду пропущенный сценарий ios. Моя точка зрения заключается в том, что должны быть включены следующие результаты:
- , если две таблицы удовлетворяют всем этим условиям, заданным с помощью ключей и даты, то они включаются, как показано в строках 1 и 2 в желаемом результате.
- если какое-либо из этих условий не будет выполнено, то мы сохраняем информацию одной таблицы в результате, как показано в строках 3, 4, 5 и 6, в желаемом результате.
РЕДАКТИРОВАТЬ: Основываясь на предложении @Gordon Linoff, я использовал объединение всех, чтобы решить эту проблему. Пожалуйста, посмотрите мое решение в моем ответе пост ниже.