表如下:
员工表:emp
职务表:zw
工种表:gz
岗位表:gw
部门表:bm
单位表:dw
要求:emp表中有zw\gz\gw\bm\dw五个表的ID,作为这五个表的外键存放数据。这五个表中,每个ID都对应着一个名字,如单位名称、职务名称…………
现在要建一个视图,把emp表中的所有数据和五个表中的名字组成一个视图,现在的问题是emp表中的五个表的外键可以为空
SELECT     dbo.T_HR_dw.dwName, dbo.T_HR_bm.bmName, dbo.T_HR_gz.gzName, dbo.T_HR_gw.gwName, dbo.T_HR_zw.zwName, dbo.T_HR_emp.*
FROM         dbo.T_HR_emp INNER JOIN
                      dbo.T_HR_dw ON dbo.T_HR_emp.dwID = dbo.T_HR_dw.dwID INNER JOIN
                      dbo.T_HR_gw ON dbo.T_HR_emp.gwID = dbo.T_HR_gw.gwID INNER JOIN
                      dbo.T_HR_gz ON dbo.T_HR_emp.gzID = dbo.T_HR_gz.gzID INNER JOIN
                      dbo.T_HR_zw ON dbo.T_HR_emp.zwID = dbo.T_HR_zw.zwID INNER JOIN
                      dbo.T_HR_bm ON dbo.T_HR_emp.bmID = dbo.T_HR_bm.bmID
这样做的话,如果emp表中的一个外键的值为空则在视图中找不到这条数据。
该如何建立这个视图呢?

解决方案 »

  1.   

    你用left join就行了.另外,外键怎么可能为空?
      

  2.   

    --1.
    SELECT dbo.T_HR_dw.dwName, dbo.T_HR_bm.bmName, dbo.T_HR_gz.gzName, dbo.T_HR_gw.gwName, dbo.T_HR_zw.zwName, dbo.T_HR_emp.*
    FROM dbo.T_HR_emp 
    left JOIN dbo.T_HR_dw ON dbo.T_HR_emp.dwID = dbo.T_HR_dw.dwID 
    left JOIN dbo.T_HR_gw ON dbo.T_HR_emp.gwID = dbo.T_HR_gw.gwID
    left JOIN dbo.T_HR_gz ON dbo.T_HR_emp.gzID = dbo.T_HR_gz.gzID 
    left JOIN dbo.T_HR_zw ON dbo.T_HR_emp.zwID = dbo.T_HR_zw.zwID 
    left JOIN dbo.T_HR_bm ON dbo.T_HR_emp.bmID = dbo.T_HR_bm.bmID--2.如果想为空的字段显示0,''之类的,用isnull,大致为:
    SELECT isnull(dbo.T_HR_dw.dwName,'') dwName, dbo.T_HR_bm.bmName, dbo.T_HR_gz.gzName, dbo.T_HR_gw.gwName, dbo.T_HR_zw.zwName, dbo.T_HR_emp.*
    FROM dbo.T_HR_emp 
    left JOIN dbo.T_HR_dw ON dbo.T_HR_emp.dwID = dbo.T_HR_dw.dwID 
    left JOIN dbo.T_HR_gw ON dbo.T_HR_emp.gwID = dbo.T_HR_gw.gwID
    left JOIN dbo.T_HR_gz ON dbo.T_HR_emp.gzID = dbo.T_HR_gz.gzID 
    left JOIN dbo.T_HR_zw ON dbo.T_HR_emp.zwID = dbo.T_HR_zw.zwID 
    left JOIN dbo.T_HR_bm ON dbo.T_HR_emp.bmID = dbo.T_HR_bm.bmID
      

  3.   


    我说的为空是指emp表中的为空