2012-01-11 5 views
0

3 개의 테이블을 만들었습니다. 각 테이블초보자를위한 쿼리 도움말

지금
tblRegion{RegionID as Integer, RegionName as varchar(100)}, 

tblCountries{CountryID as Integer, CountryName as varchar(100), RegionID as varchar(3)}, 

tblUsrs{UserID as Integer, UserName as varchar(100), PrefRegion as varchar(3), PrefCountries as varchar(100)} 

데이터 : 상기 데이터로부터

tblRegion 
--------- 
RegionID RegionName: 
1 Asia -- 
2 Africa -- 
3 Europe -- 
4 America 

tblCountries 
------------- 
CountryID CountryName RegionID: 
1 China 1 -- 
2 Malaysia 1 -- 
3 Singapore 1 -- 
4 Afganistan 3 -- 
5 UK 3 -- 
6 Spain 3 -- 
7 Libiya 2 -- 
8 Morocco 2 -- 
9 US 4 -- 
10 Canada 4 -- 
11 Mexico 4 

tblUsrs 
------- 
UsrID UsrName PrefRegion PrefCountries: 
1 Mike 2 -1 -- 
2 John -1 '1,5,9' -- 
3 Michael -1, '1' -- 
4 Tango -1 '8,9' 

사용자 2와 같은 영역을 통과하는 경우, 모두 1 아이디 & 4가 표시된다.

나는 질의를 작성했지만 몇 가지 문제가있는 것처럼 보입니다.

Select * 
from tblUsers 
where (PrefRegion = '2') or ('2' in (
     Select RegionID 
     from tblCountries, tblUsers 
     where convert(varchar,tblCountries.CountryID) in (tblUsers.PrefCountries) 
     ) 
    ) 

답변

0

wherclause 번째 부분 부속 부 부속이 올바른 경우에도 아무런 의미하지 않는다합니다 ('또는'은 이후) -는 영역 ID에 대한 2에 tblUsers 선택에 영향에이없는 가지고 있는지 찾기 모든.

편집 : :) 그것을 읽을 만들기위한 감사 미갈은

아마도 당신이 필요한 것은 라인 3 일이 당신의 선택 : 당신이 사용자에 가입하기 만하면됩니다 것 같습니다 무엇

where (PrefRegion = '2') and (PrefRegion in (the rest of the subselect)) 
+0

이것이 작동하지 않습니다. – Learner

+0

작동하지 않는 기능에 대해 좀 더 자세히 설명해 주시겠습니까? SQL erorr 또는 잘못된 결과 집합. – dbrin

+0

데이터에서 보면 PrefRegion은 사용자 1과 사용자 4의 PrefRegion = -1이지만 국가 번호 8의 PrefCountries는 다시 지역 2에 속합니다. – Learner

0

다른 두 테이블이 같은 테이블 :

SELECT * 
FROM regions 
INNER JOIN users_temp ON regions.rid = users_temp.prefRegionID 
INNER JOIN countries ON users_temp.prefCountryID = countries.cid 

WHERE(users_temp.prefRegionID = 2) AND (users_temp.prefCountryID = 2) 

이 테이블

은 다음과 같이 결합 될 것이다 :

enter image description here

디자인에서 접두사 tbl을 제거하고 (필요 없음) 사용자가 선호하는 단일 지역 및 국가 만 사용한다는 가정을했습니다. 그렇지 않은 경우 연결 유형 테이블을 사용하여 각 사용자에 대해 여러 가지 기본 값을 저장합니다.