我需要将三个表连接在一起并获得结果组合。我尝试过使用左/右连接,但它们没有达到预期的效果。
例如:
表1 - 工作人员
id name
1 John
2 Fred
表2 - STAFFMOBILERIGHTS
id staffid mobilerightsid rights
--this table is empty--
表3 - MOBILERIGHTS
id rightname
1 Login
2 View
我需要的是结果......
id name id staffid mobilerightsid rights id rightname
1 John null null null null 1 login
1 John null null null null 2 View
2 Fred null null null null 1 login
2 Fred null null null null 2 View
我尝试了以下内容:
SELECT *
FROM STAFFMOBILERIGHTS SMR
RIGHT JOIN STAFF STA
ON STA.STAFFID = SMR.STAFFID
RIGHT JOIN MOBILERIGHTS MRI
ON MRI.ID = SMR.MOBILERIGHTSID
但是这只返回两行,如下所示:
id name id staffid mobilerightsid rights id rightname
null null null null null null 1 login
null null null null null null 2 View
我想要实现的目标是什么,如果是这样的话?
由于
答案 0 :(得分:1)
从您的评论中,现在很清楚您需要cross join(包括来自员工和移动战队的所有行)。像这样的东西应该这样做
SELECT
*
FROM Staff, MobileRights
LEFT OUTER JOIN StaffMobileRights ON StaffMobileRights.StaffId = Staff.Id
FROM子句指定我们将包括Staff表中的所有行以及MobileRights表中的所有行。因此,最终结果将包含(staff * MobileRights)行。
要从StaffMobileRights引入行,我们还需要连接到该表。我们使用LEFT OUTER连接来确保我们始终包含左侧(staff表中的行),但如果右侧没有行(StaffMobileRights表),我们也不会太烦恼。如果连接不存在行,则返回空值。
答案 1 :(得分:0)
你可能要问的是看到null哪里没有权利。在矩形样式中始终返回结果,这是通过简单连接表示它的唯一方法:
从PaulG的查询中我改变了一点,总是从STAFF表中获取所有内容。
SELECT
*
FROM STAFF
RIGHT OUTER JOIN StaffMobileRights ON StaffMobileRights.StaffId = Staff.Id
INNER JOIN MobileRights ON MobileRights.Id = StaffMobileRights.MobileRightsId