我有三個表(Users,Items,UserItems),其中UserItems是用戶和項目之間的多對多關係。我需要的是一個查詢,獲取用戶沒有的所有項目。SQL Server查詢三個表之間不存在關係
我已經創建了這裏一些假數據的SQL小提琴例如:http://sqlfiddle.com/#!6/a6856/1
CREATE TABLE Users (userID INT, firstName NVARCHAR(50))
CREATE TABLE Items (itemID INT, itemName NVARCHAR(50))
CREATE TABLE UserItems (userID INT, itemID INT)
INSERT INTO Users (userID, firstName)
VALUES (1, 'Jack'), (2, 'Jill'), (3, 'John'), (4, 'Jane');
INSERT INTO Items (itemID, itemName)
VALUES (1, 'Bucket'), (2, 'Water'), (3, 'Cast');
INSERT INTO UserItems (userID, itemID)
VALUES (1, 1), (1, 2), (1, 3), (2, 3);
預期的效果用戶和他們沒有什麼物品:
---------------------------------
| userID | firstName | itemName |
|--------|-----------|----------|
| 2 | Jill | Bucket |
| 2 | Jill | Water |
| 3 | John | Bucket |
| 3 | John | Water |
| 3 | John | Cast |
| 4 | Jane | Bucket |
| 4 | Jane | Water |
| 4 | Jane | Cast |
---------------------------------
注:傑克做不需要在結果中,因爲他擁有所有三項。
謝謝!
子查詢在性能方面往往代價很高。通常,聯接將比子查詢執行得更快。將它添加到「JOINS和SUBQUERIES」。這不是一個經驗法則,有時執行計劃將是等同的。 –
這個和@Nolan的答案一樣好,但是我更喜歡這個,因爲它更乾淨。我並沒有注意到速度上的差異,但我聽到你有關「經驗法則」的消息。 – zabuuq