私は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として領域を通過し、両方のユーザID 1 & 4が表示される場合。
私は質問を書いていますが、間違っているようです。サブ副選択が正しい場合でも、副選択は意味をなさない(「または」の後)
Select *
from tblUsers
where (PrefRegion = '2') or ('2' in (
Select RegionID
from tblCountries, tblUsers
where convert(varchar,tblCountries.CountryID) in (tblUsers.PrefCountries)
)
)
これは動作していません – Learner
動作しないwhatsのもう少し詳細を教えてください。 SQLエラーまたは誤った結果セット。 – dbrin
データから見ると、PrefRegionはユーザー1とユーザー4のPrefRegion = -1では2ですが、国番号8のPrefCountriesが再び地域2の下にあります。 – Learner