我是新来的,所以我很抱歉如果我不完全清楚…
背景:
10名工作人员,均为其分配的角色。
Teacher表有6列-StaffDetailsStaffIDStaffNameDateOfBirthGenderHolidayDaysRemaining&StaffRole
我希望老师们能看到他们自己的所有细节,但只看到其他工作人员的StaffIDStaffNameStaffRole栏。
我已经解释过的代码如下:
首先,显示所有工作人员都可以看到的三列的视图(StaffIDStaffNameStaffRole):

CREATE VIEW StaffDetailsForStaffMutual AS
SELECT sd.StaffID, sd.StaffName, sd.StaffRole
FROM StaffDetails sd;

第二,一个包含DateOfBirthGenderHolidayDaysRemaining列的视图。只有登录的人才能查看这些内容(如子查询所示)。只包含StaffID属性,以便在两个视图中都有一个公共列-它在最终表中只出现一次。
CREATE VIEW StaffXDetailsForStaffX AS
SELECT sd.StaffID, sd.DateOfBirth, sd.Gender, sd.HolidayDaysRemaining
FROM StaffDetails sd
WHERE StaffID IN
    (SELECT USER
    FROM DUAL);

我的问题是,我找不到方法将这两个视图合并成一个表。在一个完美的世界中,如果一个id为301的工作人员登录并查询整个表,它将显示六列,第一行将包含他们的所有数据,第二行将包含staffid 302的三列数据等等。
任何帮助在此将不胜感激!
(最后,为了表明我已经试过了,我尝试了这个查询:
CREATE VIEW StaffDetailsForStaff AS
SELECT sdfsm.StaffID, sdfsm.StaffName, sdfsm.StaffRole,
    sxdfsx.DateOfBirth, sxdfsx.Gender, sxdfsx.HolidayDaysRemaining
FROM StaffDetailsForStaffMutual sdfsm, StaffXDetailsForStaffX sxdfsx
WHERE sdfsm.StaffID = sxdfsx.StaffID;

但当以301登录并查询时,它只显示了301的数据,而没有其他人的数据!)

最佳答案

你可能需要一个outer join

CREATE VIEW StaffDetailsForStaff AS
SELECT sdfsm.StaffID, sdfsm.StaffName, sdfsm.StaffRole,
    sxdfsx.DateOfBirth, sxdfsx.Gender, sxdfsx.HolidayDaysRemaining
FROM StaffDetailsForStaffMutual sdfsm LEFT JOIN StaffXDetailsForStaffX sxdfsx
     ON sdfsm.StaffID = sxdfsx.StaffID;

10-07 19:50