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