SQL JOIN和WHERE语句

时间:2009-10-01 10:12:08

标签: sql join

我有一个问题让这个sql状态员返回我想要的东西: 我希望它返回员工或Job_Profile的属性列表。如果其中一个没有该属性,则应该在该行/列中返回NULL 现在sql看起来像:

SELECT Parameter.Patameter_Description ParamName, 
       Job_Profile.Title, Job_Property.Mark JobMark, 
       Emp_Property.Mark EmpMark, 
       Emp_Id--, (Employee.First_Name + ' ' + Employee.Last_Name) EmpName
FROM Job_Property
INNER JOIN  Job_Profile ON Job_Profile.Title = Job_Property.Job_Title
INNER JOIN Parameter ON Job_Property.Parameter_Id = Parameter.Id
RIGHT JOIN Emp_Property ON Emp_Property.Parameter_Id = Job_Property.Parameter_Id
INNER JOIN Employee ON Emp_Property.Emp_Id = Employee.Enterprise_Staff_Id

WHERE Employee.Enterprise_Staff_Id = 22 
AND Job_Profile.Title = 
    (SELECT 
       Employee.Job_Profile_Name 
       FROM Employee WHERE Employee.Enterprise_Staff_Id = 22)

结果是:

Analyse test    1   3   22

我希望它是这样的:

Analyse     test     1      3       22

Data        test     3      NULL    NULL or 22

economic    test     4      NULL    NULL or 22

Service     test     2      NULL    NULL or 22

我知道我遇到问题:   - 加入Emp_Property   - 制作WHERE语句

3 个答案:

答案 0 :(得分:3)

加入Emp_Property

时尝试LEFT OUTER JOIN

答案 1 :(得分:1)

我找到了一个解决方案,我必须制作临时表并加入它们:

CREATE TABLE #CompareJob
(Parameter_Id INT
,Parameter_Name VARCHAR(MAX)
,Jobprofile VARCHAR(30)
,Job_Mark INT
)
INSERT INTO #CompareJob(Parameter_Id,Parameter_Name, Jobprofile ,Job_Mark)
    SELECT  Parameter.Id, Parameter.Patameter_Description, Job_Profile.Title, Job_Property.Mark
    FROM Job_Property
    INNER JOIN  Job_Profile ON Job_Profile.Title = Job_Property.Job_Title
    INNER JOIN Parameter ON Job_Property.Parameter_Id = Parameter.Id
    WHERE Job_Profile.Title = (SELECT Employee.Job_Profile_Name FROM Employee WHERE Employee.Enterprise_Staff_Id = 22)

CREATE TABLE #CompareEmp
(Parameter_Id INT
,Parameter_Name VARCHAR(MAX)
,Emp_Id INT
,Emp_Name VARCHAR(100)
,Emp_Mark INT
)
INSERT INTO #CompareEmp(Parameter_Id,Parameter_Name, Emp_Id , Emp_Name ,Emp_Mark)
    SELECT  Parameter.Id, Parameter.Patameter_Description, Employee.Enterprise_Staff_Id, (Employee.First_Name + ' ' + Employee.Last_Name) empname, Emp_Property.Mark
FROM Emp_Property
INNER JOIN Employee ON Employee.Enterprise_Staff_Id = Emp_Property.Emp_Id
INNER JOIN Parameter ON Parameter.Id = Emp_Property.Parameter_Id
WHERE Employee.Enterprise_Staff_Id = 22

SELECT * FROM #CompareJob
FULL OUTER JOIN #CompareEmp ON #CompareJob.Parameter_Id = #CompareEmp.Parameter_Id

答案 2 :(得分:0)

同意Danny,使用'LEFT OUTER JOIN'方法而不是'INNER JOIN',因为这只会返回在两个表中找到条目的行。