我有两个表,一个名为employee
,包含员工的详细信息,主键为employee_id
和employee_name
。
另一个名为assignment
,主键为assign_id
。
现在,表employee
中有两列。一个是preference_1
,另一个是preference_2
。这两者都可以包含表assign_id
中的assignment
。首选项1必须由所有员工填写,首选项2是可选的,但不应超过两个首选项。
如何链接这两个表?
答案 0 :(得分:1)
preference_1和preference_2应该是两个单独的表,而不是在employee表中。您可以在pref_1,pref_2 AND分配表中包含employee_ID。
答案 1 :(得分:0)
也许是这样的
SELECT e.employee_name, a1.assigment_name AS firstPreference, a2.assignment_name AS secondPreference
FROM employee e
JOIN assignment a1 ON e.preference_1 = a1.assign_id
LEFT JOIN assignment a2 ON e.preference_2 = a2.assign_id
答案 2 :(得分:0)
因为,preference_2
是可选的;将preference_1
(或者)preference_1
/ preference_2
foreign keys
设为assignement的assignment_id。手段,preference_1/preference_2 references assignment(assignment_id)
。
谈到这段关系,对我而言,它看起来像many-many
关系;因为员工可以从事多项任务,同样可以将一项任务分配给多名员工。
创建表:
对NULL
加上preference_1
约束,因为它必须由员工填写;与preference_1 int not null
类似,但请将{2} nullable column
作为preference_2 int null
。
这将确保每位员工至少有一项任务。如果填写了可选的pref_2,那么他/她将进行2次分配。
查询时,您可以进行
等连接select e.* from employee e join assignment a on
e.preference_1 = a.assignment_id
and isnull(e.preference_2,0) = a.assignment_id