次のようにテーブルを再設計する必要があります
CountryTable : CountryID (int, autonumber, PK), CountryName (varchar2)
StateTable : StateID (int, auto number, PK), StateName (varchar2), ContryID (int , FK)
CityTable : CityID (int, auto number, PK), CityName (varchar2), StateID (int, FK)
この 3 つの promoScheduleCountry、promoScheduleStates、promoScheduleCities テーブルを使用するのではなく、このような新しいテーブルを作成します
PromoLocation : PromoLocationId (int, autonumber, PK), PromoScheduleID (int, FK), CountryID(int, FK), StateID(int, FK), CityID(int, FK)
すべてのテーブルのダミーデータは次のようになります
CountryTable
---------------------------
CountryID | CountryName
---------------------------
1 | USA
2 | France
3 | Russia
4 | India
---------------------------
StateTable
-----------------------------------------
StateID | StateName | CountryID
-----------------------------------------
1 | New York | 1
2 | Alaska | 1
3 | Michigan | 1
-----------------------------------------
CityTable
-----------------------------------------
CityID | CityName | StateID
-----------------------------------------
1 | Albany | 1
2 | Buffalo | 1
3 | Rochester | 1
-----------------------------------------
PromoSchedule
-----------------------------------------
promoScheduleid | PromoEventName
-----------------------------------------
1 | Event1
2 | Event2
3 | Event3
4 | Event4
----------------------------------------
PromoLocation
--------------------------------------------------------------------------------------
PromoLocationID | PromoScheduleID | CountryID | StateID | CityID
--------------------------------------------------------------------------------------
1 | 1 | 1 | |
2 | 2 | | 1 |
3 | 3 | | | 1
4 | 4 | | | 2
---------------------------------------------------------------------------------------
あなたのクエリは次のようになります
SELECT * FROM PromoSchedule WHERE promoScheduleid IN
(SELECT promoScheduleid FROM PromoLocation WHERE CountryID = '<CountryID>' OR
StateID IN (SELECT StateID FROM StateTable WHERE CountryID = '<CountryID>') OR
CityID IN (SELECT * FROM StateTable WHERE StateID IN (SELECT StateID FROM StateTable WHERE CountryID = '<CountryID>')))
これは、JOIN を使用して実現することもできます。