2

我应该使用什么连接来根据下面的虚拟表获得所需的输出

明细表

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

列表日期为 2016 年 10 月 1 日至 2016 年 10 月 15 日

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
4

2 回答 2

1

答案是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 
于 2016-10-22T03:58:22.347 回答
0

看起来你只需要一个outer join

select e.empid, e.empname, d.date
from dates d 
   left join detail e on d.date = e.date
于 2016-10-22T03:58:12.933 回答