-1

私は4つのテーブル、promoScheduleを持っています

id | startdate | enddate  
1 |1 july | 10 july  
2 |1 july | 20 july  
3 |2 july | 30 july  
4 |1 july |15 aug  

さらに 3 つのテーブル promoScheduleCountry、promoScheduleState、promoScheduleCity があります。これらの表のデータは、

promoScheduleCountry  
id | promoScheduleId | countryId  
1  | 1               | US

promoScheduleStates  

id | promoScheduleId | stateId  
1  | 2               | New york 



promoScheduleCities  
id | promoScheduleId | cityId  
1  | 3               | Amsterdam  
2  | 4               | Geneva   

国、都道府県、市区町村が関連しています。

ここ、すべての promoScheduleIds が必要です。ここで、 countryIdUS と指定すると、promoScheduleCountry、promoScheduleState、promoScheduleCity の 3 つのテーブルから、promoScheduleIds 1、2、3、4 が必要になります。

stateId をニューヨークと言う場合、2 つのテーブル、つまり promoScheduleState と promoScheudleCity から、promoScheduleIds 2、3、4 が必要です。

このクエリまたはストア プロシージャ、またはそれを行う方法のガイドラインが必要ですか?
目的を理解するために、私は国、州、都市の名前を持っています. 実際には、country、state、city の 3 つのテーブルがあります。そして、それらはそれぞれに関連しています。つまり、州テーブルには国の主キーがあり、都市テーブルには州テーブルの主キーがあります

4

2 に答える 2

0

次のようにテーブルを再設計する必要があります

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 を使用して実現することもできます。

于 2013-07-26T06:44:59.587 に答える
0

これはあなたの質問に対する直接的な回答ではありませんが、テーブルの設計に関するクエリであり、不必要に複雑に思えます (クエリを実行するとわかるように)。

3 つの promoXXX テーブルを 1 つの PromoLocations テーブルに置き換えることができます。

ID    PromoScheduleID   CountryID   StateID   CityID

これにより、コードのコーディングとクエリが大幅に簡単になります。

于 2013-07-26T05:48:54.503 に答える