2012-03-04 1 views
0

テーブルから一意の値を取得は、これは私のシナリオです

  • 各状態は、複数のゾーン
  • 各ゾーンを持つ複数の地区
  • 各地区が
  • 各都市は、複数のハウス
  • 持つ複数の都市を持っている必要があり
  • 各家には、ユニークな身元を持っている複数の役人の生活があります。

これで、指定された指定と指定されたゾーンを持つ特定の役員に属する情報がすでにテーブルに入っているかどうかを確認したいと思います。

私は、それは状況ACTIVEであり、それは、指定されたゾーンに属する特定の役員の地区のIDを表示することを意味し、この

SELECT DISTRICT_ID FROM DISTRICT WHERE DISTRICT_ID='(SELECT DISTRICT_ID FROM CITY WHERE CITY_ID='(SELECT CITY_ID FROM CITY_INFO WHERE CITY_PIN=(SELECT CITY_PIN FROM STATION_HOUSE WHERE STATION_ID='(SELECT STATION_ID FROM OFFICER_HISTORY OH,OFFICER O WHERE OH.OFFICER_ID=O.OFFICER_ID AND (O.DESIGN_ID='"+design+"' AND O.STATUS_TYPE='ACTIVE'))'))')' AND ZONE_ID='"+zone+"' 

ようにしようとしていました。

上記のクエリが情報を返す場合は、情報が既に存在することを意味します。以来、私のテーブルには、条件に関連するデータは存在しませんが、私は私のSQLクエリが完璧だと思う。しかし、それは長すぎます。誰かが私にそれを短くて効率的なものにする手助けをすれば、私は彼/彼女に非常に感謝します。

答えて

2

一連のサブクエリではなく、結合テーブルとして行う必要があります。

SELECT DISTRICT_ID FROM DISTRICT 
inner join city on district.district_id = city.district_id 
inner join city_info on city.city_id = city_info.city_id 
inner join station_house on station_house.city_pin = city_info.city_pin 
inner join officer_history on officer_history.station_id = station_house.station_id 
inner join officer on officer.officer_id = officer_history.officer_id 
    and officer.design_id= design 
    and officer.status_type = 'ACTIVE' 
    and officer.zone_id = zone 

SQLテキストと変数を連結するように注意してくださいSQLインジェクション攻撃に開いてあなたを残し、それはあなたに関係する場合は、あなたのSQLクエリは、クエリparametrisedに変わります。

+0

zone_idは役員テーブルに属していませんが、区域テーブル –

+0

に属しています。変更すると区域内の市区町村に属します。district_istrict_id = city.district_id and district.zone_id = zone –

+0

今は完全に混乱しています。 DISTRICT \t FROMあなたが言おうとしているもの。.. –

関連する問題