如何基于唯一ID关联两个表

时间:2017-07-17 23:23:35

标签: sql sql-server

我想在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与故障单关联?

希望我说得够清楚了!

1 个答案:

答案 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_IDTicket_Num

然后,您可以Logins加入Logins2Tickets Login.Login_ID = Tickets.Login_Id Logins2TicketsTickets加入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; ...]