我有两张桌子:
EMP
emp_id | Name | Surname |
1 | Bob | Park |
2 | Annie| South |
3 | Eric | P. |
PROJECT
proj_id | Tester_1 | Tester_2 | Tester_3 |
1 | 2 | 3 | 1 |
现在我正在尝试制作视图,以便我有以下
proj_id | Tester_1_Name | Tester_2_Name | Tester_3_Name
1 | Annie | Eric | Bob
答案 0 :(得分:9)
你必须加入
Select proj_id,
t1.name + ' ' + t1.surname tester1,
t2.name + ' ' + t2.surname tester2,
t3.name + ' ' + t3.surname tester3
From Project p
Left Join Emp t1 On t1.emp_id = p.Tester_1
Left Join Emp t2 On t2.emp_id = p.Tester_2
Left Join Emp t2 On t3.emp_id = p.Tester_3
作为观点...
Create View ProjectWithTesters
As
Select proj_id,
t1.name + ' ' + t1.surname tester1,
t2.name + ' ' + t2.surname tester2,
t3.name + ' ' + t3.surname tester3
From Project p
Left Join Emp t1 On t1.emp_id = p.Tester_1
Left Join Emp t2 On t2.emp_id = p.Tester_2
Left Join Emp t2 On t3.emp_id = p.Tester_3
注意:正如其他人提到的,您的数据库设计违反了第一范式“应该没有重复的组”,这意味着表不应包含多个列,这些列代表某些属性的多个实例(例如您的tester_1,tester_2,tester_3 )。查看此链接:database normalization了解更多信息。
答案 1 :(得分:7)
您应该考虑规范化您的数据库。当您决定在项目中需要4名测试人员时会发生什么?
那说,这应该给你你想要的东西。
SELECT
P.proj_id,
E1.name AS tester_1_name,
E2.name AS tester_2_name,
E3.name AS tester_3_name
FROM
Project P
LEFT OUTER JOIN Emp E1 ON
E1.emp_id = P.tester_1
LEFT OUTER JOIN Emp E2 ON
E2.emp_id = P.tester_2
LEFT OUTER JOIN Emp E3 ON
E3.emp_id = P.tester_3
答案 2 :(得分:2)
解决方案是DBMS特定的。有些DBMS具有实用功能,可以帮助您在此尝试正交化。
Charles解决方案是一个良好的开端:
Select proj_id,
t1.name + ' ' + t1.surname tester1,
t2.name + ' ' + t2.surname tester2,
t3.name + ' ' + t3.surname tester3
From Project p
Left Join Emp t1 On t1.emp_id = p.Tester_1
Left Join Emp t2 On t2.emp_id = p.Tester_2
Left Join Emp t2 On t3.emp_id = p.Tester_3
正交化的其他方法是合并和分组,如果项目中的测试人员较少,这种方法尤其有用。
答案 3 :(得分:1)
如果你设计了这些表格,那么你可能想在google中查找“normalization”,除非一个项目只能有3个测试人员......
答案 4 :(得分:0)
SELECT proj_id, t1.Name, t2.Name, t3.Name
FROM PROJECT
INNER JOIN EMP as t1 ON PROJECT.Tester_1 = t1.emp_id
INNER JOIN EMP as t2 ON PROJECT.Tester_2 = t2.emp_id
INNER JOIN EMP as t3 ON PROJECT.Tester_3 = t3.emp_id