我想在SQL Server中加入两个表。
其中一个用于呼叫数据并具有唯一ID Login_ID
。此表不包含员工姓名。
另一个表没有员工的唯一ID。
我需要做的是加入这两个表,以便我可以同时看到员工的呼叫数据和票证数据。
不幸的是,故障单表中没有Login_ID
的关联列来链接员工数据。
呼叫数据表示例:
Login_ID | Calls | CallTime | Date |
00000001 | 34 | 349874 | 030317 |
票证表示例:
Name | Ticket_Num | Date |
Some Emp | 5456465434 | 030317 |
所以会发生什么:每当有人更改他们的名字时,他们在这张桌子里基本上都有一个新的ID。太糟糕了。
我只需要大约18名员工的数据。
我的问题是:如何将Login_ID
与故障单关联?
希望我说得够清楚了!
答案 0 :(得分:0)
您应该使用所谓的Foreign Key来存储关联。这将确保数据之间关系的完整性,并在您尝试从不同表中提取关联数据时帮助优化查询。
FOREIGN KEY是用于将两个表链接在一起的键。
FOREIGN KEY是一个表中的字段(或字段集合) 指另一个表中的PRIMARY KEY。
包含外键的表称为子表,和 包含候选键的表称为引用或 父表。
您可以使用join
获取查询关联日期。
如果您有1:1的关系,则可以将Login_ID
作为字段添加到您的故障单表格中,然后您可以在Login.Login_ID = Tickets.Login_Id
上加入您的表格。
Alter Table Tickets
Add Login_ID int not null Constraint "FK_Tickets_LoginId" References Tickets(Login_Id)
// USAGE:
Select * from Logins Join Tickets on Logins.Login_ID=Tickets.Login_Id where Login_ID=@LoginId
如果您无法修改任何一个表,那么您可以创建一个新表,可能Logins2Tickets
包含两个字段Login_ID
和Ticket_Num
然后,您可以Logins
加入Logins2Tickets
Login.Login_ID = Tickets.Login_Id
Logins2Tickets
,Tickets
加入Logins2Tickets.Ticket_Num = Tickets.Ticket_Num
Create Table Logins2Tickets
(
Login_ID int not null constraint "FK_Logins2Tickets_Login_ID" References Logins(Login_Id)
Ticket_Num bigint not null constraint "FK_Logins2Tickets_Ticket_Num" References Tickets(_Login_ID)
)
// USAGE:
Select *
From
Logins l Join Logins2Tickets lt
on l.Login_ID=lt.Login_ID
Join Tickets t
on lt.Ticket_Num=t.Ticket_Num
WHERE Login_ID=@LoginId
open System.Linq
open System.Collections.Generic
open System
let xs = seq [seq [1;2;3]; seq [4;5;6]]
xs.SelectMany(fun x -> x ).Select(fun x -> x * x)
// val it: IEnumerable<int> = seq [1; 4; 9; 16; ...]