SELECT语句

时间:2009-12-01 14:40:32

标签: sql

我有两张桌子:

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

5 个答案:

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