使用空行合并来自不同SQL Server表的2列

时间:2016-03-16 17:49:26

标签: sql sql-server join sql-server-2014

我有这个查询来实现我的目标:

SELECT 
    Datum, LeavetypeID 
FROM 
    Kalender 
INNER JOIN 
    VerlofLijn ON Kalender.ID = VerlofLijn.DagID 
WHERE 
    VerlofLijn.Persnummer = @pnummer;

所以基本上我在表Kalender中有一个日历。

每天都有唯一的ID(Kalender.ID)。在第二个表格(VerlofLijn)中,匹配的Kalender.IDVerlofLijn.DagID以及唯一的员工编号leavetype一起存储在Persnummer中。

我想要实现的是一个从日历加载所有日期的查询,并且 - 如果当前登录的员工已经离开数据库 - 在正确的日期旁边显示。

因此,如果该员工的数据库中根本没有请假,我仍然需要显示日历,以便下一步他可以在个人日历中添加休假。

我可以为每个员工创建一个个人日历,但必须有一个更好的方法,而不需要在数据库中存储大量数据的开销,这将使查询花费更多的时间来搜索和完成。

2 个答案:

答案 0 :(得分:1)

请尝试此查询

SELECT 
    Datum, LeavetypeID 
FROM 
    Kalender 
LEFT JOIN 
    VerlofLijn 
ON Kalender.ID = VerlofLijn.DagID AND VerlofLijn.Persnummer = @pnummer;

说明:正如您所说

  

我想要实现的是一个加载日历中所有日期的查询

你应该使用Kalender LEFT JOIN VerlofLijn

答案 1 :(得分:0)

您是否尝试过LEFT OUTER JOIN?

SELECT 
    Datum, LeavetypeID 
FROM 
    Kalender 
LEFT OUTER JOIN
   VerlofLijn ON Kalender.ID = VerlofLijn.DagID 
WHERE 
   VerlofLijn.Persnummer = @pnummer;

即使表VerlofLijn中没有匹配项,以及VerlofLijn中的所有常用值,您也可以从Kalendar获取所有值。

您可以在此处找到一些示例:What is the difference between "INNER JOIN" and "OUTER JOIN"?