我是新来的,所以我很抱歉如果我不完全清楚…
背景:
10名工作人员,均为其分配的角色。Teacher
表有6列-StaffDetails
,StaffID
,StaffName
,DateOfBirth
,Gender
,HolidayDaysRemaining
&StaffRole
我希望老师们能看到他们自己的所有细节,但只看到其他工作人员的StaffID
、StaffName
和StaffRole
栏。
我已经解释过的代码如下:
首先,显示所有工作人员都可以看到的三列的视图(StaffID
,StaffName
,StaffRole
):
CREATE VIEW StaffDetailsForStaffMutual AS
SELECT sd.StaffID, sd.StaffName, sd.StaffRole
FROM StaffDetails sd;
第二,一个包含
DateOfBirth
、Gender
和HolidayDaysRemaining
列的视图。只有登录的人才能查看这些内容(如子查询所示)。只包含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;