2012-01-11 116 views
0

我已經創建了3個表格。要被顯示新手需要查詢幫助

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時,兩個用戶ID 1 & 4:在每個表

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)} 

立即數據。

我寫過查詢,但看起來有些錯誤。

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

回答

0

的wherclause的第二部分的子查詢中是沒有意義的,即使子子選擇是正確的(該「或」後) - 找出如果它有一個2區域ID具有在上向tblUsers選擇沒有影響所有。

編輯:感謝米哈爾爲使其可讀:)

也許你需要什麼,這是對3號線的選擇:

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

這不起作用 – Learner 2012-01-11 07:44:38

+0

你可以給一些什麼不工作的更多細節? SQL錯誤或不正確的結果集。 – dbrin 2012-01-11 07:48:32

+0

如果您從數據中看到,PrefRegion對於用戶1和用戶4 PrefRegion = -1是2,但PrefCountries具有國家/地區ID8,它又位於區域2下。 – Learner 2012-01-11 07:48:42

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(不是必需的),並假設用戶只有一個首選區域和國家。如果沒有,您將使用關聯類型表來存儲每個用戶的許多首選值。