我有一個一對多的連接。完美無瑕地工作,並且很快。一對多在許多表中可能有零個記錄。如果是這種情況,我想將它加入到許多表中的所有記錄中。SQL一對多或多對多?
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)
這是處理這一正確的方法是什麼?當我有很多用戶/類別組合時,它似乎有點太多的開銷。
這似乎颳了一段時間的腳本。謝謝!這是一個幫助。我不知道爲什麼我沒有看到。 –