连接SQL表的新手

时间:2015-06-23 12:12:52

标签: sql sql-server

我是SQL的新手,所以请原谅我,如果我不正确地理解这一点。

我有一个名为Employees的表,其中包含以下列:

EmployeeID - This is Int Identity (1,1)
FirstName
LastName

我有一个名为Calendar的第二个表,其中填写了未来50年的日历信息。列是:

FullDate
Year
Month
Week
DayofWeek
DayofMonth
DayofYear
TypeofDay - (Weekday, Weekend, Bank holiday etc)

现在我觉得有点困惑 - 我想我需要一个链接上面两个表的第三个表(表3),所以我有一个表格,如:

TableId
FullDate - linked from calendar table
EmployeeID - linked from employee table
FirstName - linked from employee table
LastName - linked from employee table
Shift1Text
Shift2Text

如果我的理解是正确的,那么我可以使用如下命令:

select * from Table3 where FullDate = **Chosen Date / DateRange** 

所以我最终会得到一个输出:

Table ID | FullDate   | EmployeeID | FirstName | LastName | Shift1Text | Shift2Text 
---------+------------+------------+-----------+----------+------------+------------
1        | 22/06/2015 | 1          | Joe       | Blogs    | SomeText   | SomeText   
2        | 22/06/2015 | 2          | Fred      | Smith    | SomeText   | SomeText   
3        | 22/06/2015 | 3          | Bob       | Jones    | SomeText   | SomeText   
4        | 23/06/2015 | 1          | Joe       | Blogs    | SomeText   | SomeText   
5        | 23/06/2015 | 2          | Fred      | Smith    | SomeText   | SomeText   

依旧......

问题是,我不知道如何以这种方式链接表,或者自动使用前两个表中的日期和员工信息填充第三个表的行。

3 个答案:

答案 0 :(得分:2)

最好在您的日历表中添加ID,这样您的架构应该是这样的enter image description here

注意:在EmployeeDate表中,您不需要添加FirstName或LastName,因为您有EmployeeID,它引用了Employee表,您可以轻松获取这些字段。

您的查询将是这样的。

var total = 0;
$(".refineItem").each(function(){
total += Number(Number($(this).text().trim().match(/\((\d+)\)/)[1]));
});

感谢

答案 1 :(得分:0)

您需要避免在表之间复制数据,而是在查询中进行连接。该链接与日历表中的员工ID一起存在,因此您不需要第三个表。粗略地说,您的查询看起来像这样:

select c.fulldate, e.employeeid, e.firstname, e.lastname (other columns....)
from employees e
join calendar c on c.employeeid = e.employeeid

否则,请查看使用视图(如果my-sql可以使用它们?)

答案 2 :(得分:0)

enter image description here

我真的不明白你的桌面日历是做什么的。但是如果你像这样链接两个表,这意味着一个员工有一个日历。如果一个员工有多个日历,则必须从日历中删除主键。主键意味着唯一。对于员工而言,这意味着员工无法共享相同的ID。

我不明白您的员工和日历之间的联系