Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

SQL запрос в FoxPro, соединение 2 таблиц [dBase, FoxPro]


Страницы:   1 2

Well ©   (2005-10-04 10:04:00) 

Задавал вопрос в разных форумах, но пока решения нет.

Задача соединить 2 таблицы: Phone и Code. Пример для наглядности.
Quote:
Таблица Phone: Таблица Code:

Tel Code Town
100ххх 100 aaaaa
200ххх 200 bbbbb
1000хх 1000 ccccc
10хххх 10 ddddd
100ххх  

Соединить надо по полю Code, тоесть при равенстве значения поля Code и поддстроки поля Tel. Результат должен быть таким:
Quote:
Таблица Rezult:

Tel Town
100ххх aaaaa
200ххх bbbbb
1000хх ccccc
10хххх ddddd
100ххх aaaaa

Если бы строки в поле Code были одинаковой длины, все было бы просто: SELECT tel, code FROM phone,code WHERE (tel=code)
Но длина подстроки различна и в результате запроса появляются лишние строки, так как сравнение 1000хх считается истиным
как со значением 1000 так и со значениеми 100 и 10 в таблице Code.

Подскажите как решить эту проблему?


Виталий Панасенко   (2005-10-04 12:48:00) [21]


> Вынести код в отдельное поле не могу, так как получаю все
> в виде одной строки

А откуда получаешь ?


ANB   (2005-10-04 12:40:00) [22]


> В данном случае такой вариант исключен.
> Главное определить, что в 2222 45 67 85  код 2222, а не
> 222!
- каким образом исключен ?

2222345678
2222456785

- где какой код ?


ANB   (2005-10-04 12:38:00) [23]


> Well   (04.10.05 12:35) [8]
- вообще то АТС это как то разруливают. Поищи литературу по кодификации телефонных номеров. Если накопаешь - запости результат. Проблема интересная, так как всегда может вылезти подобная задача по билингу.


Well   (2005-10-04 12:37:00) [24]


> 222 234 56 78
> 2222 45 67 85
>
> - как ты отличишь, что у первого код 222, а у второго 2222
> ?


В данном случае такой вариант исключен.
Главное определить, что в 2222 45 67 85  код 2222, а не 222!


Well   (2005-10-04 12:35:00) [25]

Kulakov_an  
Да задача именно такая. И проблема в том что есть равноправные коды как 222 так и 2222.
Буду думать.
Всем спасибо!


Kulakov_an   (2005-10-04 11:31:00) [26]

Не совсем понял структуру этих таблиц
но возможно такой вариант пойдет хотя работать будет гораздо медленнее чем с Id  но как я понимаю задача такая что в БД пишутся телефонные звонки в которых есть номер телефона с кодом города  и есть отдельная таблица в которой указан код города и город
попробуй вот такой код  
SELECT tel, code FROM phone,code WHERE (tel like code||'%') но вот в отношении пред идушего примера отличие между 222 или 2222 будет действительно нехоношо но по крайней мере такие проги есть и работают


ANB   (2005-10-04 11:15:00) [27]


> Anatoly Podgoretsky ©   (04.10.05 11:06) [5]
- похоже, именно ID ему и надо расставить.


> Well   (04.10.05 11:00) [4]
- добавь поля связки по ИД и провязывай при добавлении кода. Будет намного быстрее. Кстати, логически эта задача все равно плохо решается.
Если после нулей всегда идет не 0, то это еще можно разделить. Но вот пример :
222 234 56 78
2222 45 67 85

- как ты отличишь, что у первого код 222, а у второго 2222 ?


Anatoly Podgoretsky   (2005-10-04 11:06:00) [28]

Ничего не понятно. Кто на ком стоял?
Соединение обычно делается так t1.id=t2.id


Well   (2005-10-04 11:00:00) [29]

ABN
Можно строку, можно выделить подстроку, проблема не меняется.

Виталий Панасенко  
Вынести код в отдельное поле не могу, так как получаю все в виде одной строки

Видимо ABN прав. Придется последовательно сканировать таблицу Phone по каждому значению кода, начиная с максимального значения кода, исключая строки в которых обнаружены совпадения :(.


ANB   (2005-10-04 10:31:00) [30]


> Tel Code Town
> 100ххх 100 aaaaa
> 200ххх 200 bbbbb
> 1000хх 1000 ccccc
> 10хххх 10 ddddd
> 100ххх  

В твоем случае никак. Т.к. :
1000хх - код здесь, это - 1, 10, 100 или 1000 ?
ЗЫ. SELECT tel, code FROM phone,code WHERE (tel=code) - с чего это такой запрос должен анализировать подстроку, а не сравнивать строки полностью ?


Виталий Панасенко   (2005-10-04 10:26:00) [31]

У таблицы Phone код(города? страны?) вынести в отдельное поле(я) и не парить ....


Sergey13   (2005-10-04 10:16:00) [32]

>Пример для наглядности
Пример не нагляден. Где там что?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо