我有一個包含兩個表的數據庫:Users
和Categories
。SQL中的可變長度int列
Users
有以下字段:
UserId unique identifier
UserName nvarchar
CategoryId int
Categories
有以下字段:
CategoryId int
CategoryName nvarchar
目前,每一位用戶都在一個類中。我想改變這一點,以便每個用戶可以在任何數量的類別。做這個的最好方式是什麼?
我的網站做了很多非常昂貴的搜索,所以解決方案需要儘可能高效。我真的不想把每個用戶在第三個表中的類別列表放在一起,因爲這意味着當我撤回搜索時,每個用戶會一次表示幾行(至少,這將會發生什麼如果我實現我的當前,相當簡陋,SQL的理解搜索)
編輯:
如果建立一個多對多的關係,是有可能只返回一行爲每個用戶?
例如:
DECLARE @SearchUserID nvarchar(200) = 1;
SELECT *
FROM Users JOIN Categories JOIN CategoriesPerUser
WHERE UserId = @SearchUserID
這將返回每種類別的用戶屬於一個行。有可能只返回一行?
第三張表是解決您的問題。至於你的查詢,你應該看看'exist'和'in'。 http://msdn.microsoft.com/en-us/library/ms177682.aspx http://msdn.microsoft.com/en-us/library/ms188336.aspx –
如果你有什麼預期的查詢輸出有多個類別的用戶?您在Where子句中沒有使用CategoriesPerUser,因此最簡單的方法是從查詢中刪除表。 –
在您編輯的示例中,如果用戶與多個類別相關聯,則需要撥打電話以確定要返回哪個用戶...可能與「SELECT TOP 1」一樣簡單。但不清楚你想要達到什麼目的。 – Jamiec