powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Как получить название оператора?
7 сообщений из 7, страница 1 из 1
Как получить название оператора?
    #37437195
redsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем доброго времени суток!

Есть Таблица с кодами операторов и Таблица с телефонами . Надо запросом получить к какому оператору какой телефон относится.
ОператорКодМТС050Life093МТС095Jeans 0957 Jeans 0959 Киевстар098Jeans099Экотел 0991 Экотел 0997
Телефон050111111109311111110951111111095711111109591111110981111111099111111109911111110997111111Натолкните на мысль, как написать правильно запрос.
...
Рейтинг: 0 / 0
Как получить название оператора?
    #37437209
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
функция substr() спасет
...
Рейтинг: 0 / 0
Как получить название оператора?
    #37437219
redsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owlфункция substr() спасет
Большое спасибо!
Похоже работает:
Код: plaintext
1.
2.
3.
4.
select 
  tel,
  tel_codes.operator
from
  m_tel left outer join tel_codes on (substr(tel,  1 ,  3 )=tel_codes.code or substr(tel,  1 ,  4 )=tel_codes.code)
...
Рейтинг: 0 / 0
Как получить название оператора?
    #37437220
redsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
... хотя нет. С чего бы результату выдавать сначало 4-х значное совпадение, а потом 3-х значное. Как в запросе указать, что сначало надо 4-х значные выбрать коды, а потом на оставшиеся телефоны - 3-х значные совпадения ?
...
Рейтинг: 0 / 0
Как получить название оператора?
    #37437807
Stupid_BOT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redsky,

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select 
  coalesce(A.tel,t2.tel) tel,
  A.operator operator
from
-- телефоны 'длиннокодовыХ' операторов
  (select * from tel_codes c left join m_tel t on c.code=substr(t.tel, 1 , 4 ) ) A 
-- телефоны 'первичных' операторов
  left join m_tel t2 
	on A.tel is null and A.code=substr(t.tel, 1 , 3 );
--ЗЫ: схему данных менять надо, однако.
...
Рейтинг: 0 / 0
Как получить название оператора?
    #37437856
Stupid_BOT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redsky,
-- вариант без джойнов (легче воспринимается)
Код: plaintext
1.
2.
3.
4.
5.
select t.tel
  , coalesce(
    (select operator from tel_codes where code=substr(t.tel, 1 , 4 )),
    (select operator from tel_codes where code=substr(t.tel, 1 , 3 ))
  ) operator
from m_tel t;
...
Рейтинг: 0 / 0
Как получить название оператора?
    #37437954
redsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stupid_BOTredsky,
-- вариант без джойнов (легче воспринимается)
Код: plaintext
1.
2.
3.
4.
5.
select t.tel
  , coalesce(
    (select operator from tel_codes where code=substr(t.tel, 1 , 4 )),
    (select operator from tel_codes where code=substr(t.tel, 1 , 3 ))
  ) operator
from m_tel t;
Не знал про такую функцию COALESCE . Спасибо! Супперски!
Stupid_BOT--ЗЫ: схему данных менять надо, однако. Можно и поменять, только если пользователю прийдётся выбирать код оператора, то это не вариант, т.к. дальше могут добавиться коды городов ... однако :)
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Как получить название оператора?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]