我有一个一对多的加入。完美无瑕地工作,而且速度很快。一对多在 many 表中可能有零条记录。如果是这种情况,我想将它加入到许多表中的所有记录中。
USERS
-----
UserID | Name
CATEGORIES
------------------
CategoryID | CategoryName
USER_CATEGORIES
---------------
UserID | CategoryID
如果没有分配给用户的类别,我想加入所有类别。这背后的原因是,一些用户可能管理所有类别。如果添加了一个类别,它会自动分配给这些用户。
1 | Michael
2 | Bob
100 | Billing
101 | Email
102 | Technical
1 | 101
我希望结果是:
1 | Michael | 101 | Email
2 | Bob | 100 | Billing
2 | Bob | 101 | Email
2 | Bob | 102 | Technical
到目前为止,它的工作方式是:
DECLARE @USERS TABLE (UserID INT, UserName VARCHAR(10));
DECLARE @USER_CATEGORIES TABLE (UserID INT, CategoryID INT);
DECLARE @CATEGORIES TABLE (CategoryID INT, CategoryName VARCHAR(10));
INSERT INTO @USERS (UserID, UserName)
(
SELECT 1, 'Michael' UNION ALL
SELECT 2, 'Bob'
)
INSERT INTO @CATEGORIES (CategoryID, CategoryName)
(
SELECT 100, 'Billing' UNION ALL
SELECT 101, 'Email' UNION ALL
SELECT 102, 'Technical'
)
INSERT INTO @USER_CATEGORIES (UserID, CategoryID)
(
SELECT 1, 101
)
SELECT
U.UserID
, U.UserName
, C2.CategoryID
, C2.CategoryName
FROM
@USERS U LEFT JOIN
@USER_CATEGORIES UC ON U.UserID = UC.UserID LEFT JOIN
@CATEGORIES C ON UC.CategoryID = C.CategoryID LEFT JOIN
@CATEGORIES C2 ON C.CategoryID = C2.CategoryID OR (C.CategoryID IS NULL)
这是处理这个问题的正确方法吗?当我有很多用户/类别组合时,这似乎有点过多的开销。