我有一个包含两个表的数据库: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