@mastanggt

Как правильно организовать выборку в SQL?

Добрый вечер.
В данный момент работаю с базой ФИАС.
При регистрации человек вводит свой город и из базы подгружается список с совпадениями.
Все данные объединены в одной таблице.

Все построено в иерархической системе - у города есть parentguid который указывает на aoguid области, региона и т.д.

Я решил объединить все нужные данные в одно Представление в MySQL.

VIEW `ADDR_TEST` AS select `a`.`id` AS `id`,`a`.`AOGUID` AS `AOGUID`,
`a`.`AOLEVEL` AS `AOLEVEL`,concat(`a`.`SHORTNAME`,',',`a`.`FORMALNAME`,' ( ',`b`.`FORMALNAME`,' ',`b`.`SHORTNAME`,' )') AS `NAME`
 from (`addr_table` `a` join `addr_table` `b`) 
where ((`a`.`AOLEVEL` in (4,6)) and (`b`.`AOLEVEL` = '3') and (`a`.`PARENTGUID` = `b`.`AOGUID`) and (`a`.`LIVESTATUS` = 1) and (`b`.`LIVESTATUS` = 1) and (`a`.`ACTSTATUS` = 1) and (`b`.`ACTSTATUS` = 1) and (`a`.`CURRSTATUS` = 0) and (`b`.`CURRSTATUS` = 0)) 
order by `a`.`AOLEVEL`


В представлении получается 4 колонки - id, AOGUID(уникальный идентификатор города) , AOLEVEL(уровень (город->область->регион)) , NAME (Нормализованный вид населенного пункта ( г. Ногинск ( Московская обл ) ))

NAME -
concat(`a`.`SHORTNAME`,',',`a`.`FORMALNAME`,' ( ',`b`.`FORMALNAME`,' ',`b`.`SHORTNAME`,' )') AS `NAME`


Так же идет условие (`a`.`PARENTGUID` = `b`.`AOGUID`)

Смысл в том что не не у всех городов есть PARENTGUID и нужно как то задать условие, чтобы в представление входили все города, т.е. нужно как то сделать двойное условие (Если parentguid существует, то все оставляем так как есть сейчас, иначе просто выводим название города)

Собственно нужна помощь с тем как это реализовать.
Прошу помощи :)
  • Вопрос задан
  • 199 просмотров
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы