SQL Server ПРИСОЕДИНЯЙТЕСЬ/ПРИМЕНЯЙТЕ ЗАПРОС

Какое соединение я должен использовать, чтобы получить желаемую базу вывода на фиктивной таблице ниже

ДЕТАЛЬНАЯ ТАБЛИЦА

x------------------------------x
| empID | empName | date       |
x------------------------------x
| 1     | emp1    | 10/01/2016 |
| 1     | emp1    | 10/03/2016 |
| 1     | emp1    | 10/04/2016 |
| 1     | emp1    | 10/05/2016 |
| 1     | emp1    | 10/06/2016 |
x------------------------------x

СПИСОК ДАТ С 01.10.2016 по 15.10.2016 В ТАБЛИЦЕ

x------------x
| date       |
x------------x
| 10/01/2016 |
| 10/02/2016 |
| .......... |
| .......... |
| 10/15/2016 |
x------------x

Желаемый результат для моего запроса

x------------------------------x
| empID | empName | date       |
x------------------------------x
| 1     | emp1    | 10/01/2016 |
| null  | null    | 10/02/2016 |
| 1     | emp1    | 10/03/2016 |
| 1     | emp1    | 10/04/2016 |
| 1     | emp1    | 10/05/2016 |
| 1     | emp1    | 10/06/2016 |
| null  | null    | 10/07/2016 |
| null  | null    | 10/08/2016 |
| null  | null    | 10/09/2016 |
| null  | null    | 10/10/2016 |
| null  | null    | 10/11/2016 |
| null  | null    | 10/12/2016 |
| null  | null    | 10/13/2016 |
| null  | null    | 10/14/2016 |
| null  | null    | 10/15/2016 |
x------------------------------x

person Devs    schedule 22.10.2016    source источник
comment
Почему empID для несовпадающих записей?   -  person Pரதீப்    schedule 22.10.2016
comment
Я забыл изменить желаемый выходной empID, empName должен быть нулевым, если в списке диапазонов дат нет совпадений.   -  person Devs    schedule 22.10.2016


Ответы (2)


Ответ OUTER JOIN может быть либо LEFT, либо RIGHT в зависимости от того, где вы используете таблицу detail.

SELECT D.empid, 
       D.empname, 
       LD.[date] 
FROM   detail D 
       RIGHT OUTER JOIN list_dates LD 
                     ON D.[date] = LD.[date] 

Также вы можете использовать OUTER APPLY

SELECT D.empid, 
       D.empname, 
       LD.[date] 
FROM   list_dates LD 
       OUTER apply (SELECT * 
                    FROM   detail D 
                    WHERE  D.[date] = LD.[date]) D 
person Pரதீப்    schedule 22.10.2016

Похоже, вам просто нужно outer join:

select e.empid, e.empname, d.date
from dates d 
   left join detail e on d.date = e.date
person sgeddes    schedule 22.10.2016