получить уникальное значение из таблицы - PullRequest
0 голосов
/ 04 марта 2012

Это мой сценарий

  • В каждом штате есть несколько зон
  • Каждая зона имеет несколько районов
  • В каждом округе есть несколько городов
  • В каждом городе есть несколько домов
  • В каждом доме проживают несколько офицеров, чья уникальная личность

Итак, теперь я хочу проверить, есть ли в таблице информация, которая принадлежит конкретному сотруднику с указанным назначением и указанной зоной.

Я пытался вот так

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+"' 

Это означает, что в нем будет показан идентификатор района конкретного сотрудника, чей статус ACTIVE и который относится к указанной зоне.

Если указанный выше запрос возвращает информацию, это означает, что информация уже существует. Поскольку в моей таблице нет данных, связанных с условием, но я думаю, что мой sql-запрос идеален. Но это слишком долго. Если кто-нибудь поможет мне сделать его коротким и эффективным, тогда я буду очень признателен ему / ей.

1 Ответ

2 голосов
/ 04 марта 2012

Должен действовать как объединение таблиц, а не как ряд подзапросов.

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 в параметризованныйзапрос, если это касается вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...