Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.11;
Скачать: CL | DM;

Вниз

SQL   Найти похожие ветки 

 
Lika   (2004-04-12 11:42) [0]

Уважаемые мастера, подскажите пожалуйста
как можно заменить условие SQL запроса:
Where (имя_поля LIKE "символьная строка %")OR(имя_поля LIKE "другая символьная строка %")OR(имя_поля LIKE "другая символьная строка %")и т.д (очень длинное условие)
на более оптимальное условие?
Я хотела бы что-то вроде этого:
Where имя_поля IN ("символьная строка", "другая символьная строка",...), но как сделать чтобы сравнение было типа LIKE т.е значение поле начиналось с этих символов, а не полностью совпадало с ними.
Помогите пожалуйста, очень замучалась с таким длинными условиями!
                                 Заранее всем спасибо!


 
Nikolay M. ©   (2004-04-12 11:45) [1]

Если только через UNION-ы. Но это значит менять шило на мыло.


 
asp ©   (2004-04-12 11:47) [2]

Возможно:
...
WHERE FIELD_NAME LIKE "%строка1%строка2%строка3%"


 
Nikolay M. ©   (2004-04-12 11:56) [3]


> asp ©   (12.04.04 11:47) [2]

Не катит.
Нужно искать "ABC%" OR "DEF%".
Ты предлагаешь искать "%ABC%DEF%".
Как говорится, почуЙствуйте разницу.


 
roottim   (2004-04-12 11:56) [4]

2asp ©   (12.04.04 11:47) [2]
 фигня

2Lika   (12.04.04 11:42)  
вы что их руками пишите , или формочки какие для заполнения имеются?


 
asp ©   (2004-04-12 12:04) [5]

Я видел, что "не катит" и потому сделал приписку "возможно".


 
serge35   (2004-04-12 12:05) [6]

Может есть еще какое-нибудь служебное поле, по которому можно выбрать эти записи?


 
Lika   (2004-04-12 13:18) [7]

Нет поля никакого нет.
Речь вообще идет о бухгалтерской программе, где из таблицы проводок нужно оставить записи в которых поле "счет" принимает
одно из значений заранее известного списка счетов, только включая субсчета.


 
serge35   (2004-04-12 13:28) [8]

Если уровень вложенности ограничен, например 5 субсчетами, то надо делать UNION для каждого уровня субсчетов.


 
Lika   (2004-04-12 13:52) [9]


> Если уровень вложенности ограничен, например 5 субсчетами,
> то надо делать UNION для каждого уровня субсчетов.

Нет он не ограничен у одних счетов может быть 2субсчета,  у других 10


 
serge35   (2004-04-12 13:56) [10]

Значит надо сделать 10 или лучше 20 UNION, чтобы наверняка.


 
Lika   (2004-04-12 14:07) [11]

А что мне даст UNION, у меня и запрос с OR работает.
Мне просто хотелось в идеале, чтобы я вообще в спике переменных могла объявить нужные счета как множество.
А затем в запросах ссылаться на это множество.
А список субсчетов пользователи могут сами менять поэтому я не хочу их "жестко" задавать.
Не ужели нет никаких вариантов?


 
roottim   (2004-04-12 14:20) [12]

>нужные счета
если они известны точно, то пожайлуста...

а если нет... то чего сложного непонимаю... автоматизировать создание запроса с like сложно или что?


 
serge35   (2004-04-12 14:22) [13]

А что делают OR? и как организовано хранение счетов в базе?


 
Курдль ©   (2004-04-12 14:32) [14]

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


 
Lika   (2004-04-12 14:48) [15]


> А что делают OR? и как организовано хранение счетов в базе?

Все счета хранятся в таблице "план счетов"

> Не мучайте сервер такими запросами, или перепроектируйте
> базу!
> Обычно такие проблемы решаются на клиенте, а не на сервере,
> элементарной фильтрацией набора данных.
> А чаще всего даже более-менее навороченные "гриды" имеют
> встроенный механизм фильтрации.

Структура БД очень проста. А запросы мне нужны не для фильтрации,а для отчетов.


 
Курдль ©   (2004-04-12 14:50) [16]

А план счетов банковский или "организаций и предприятий"?


 
Lika   (2004-04-12 14:54) [17]


> а если нет... то чего сложного непонимаю... автоматизировать
> создание запроса с like сложно или что?

Счета известны, а вот субсчета нет. В этом и вся загвоздка.

> а если нет... то чего сложного непонимаю... автоматизировать
> создание запроса с like сложно или что?

Да сложного наверно ничего,но черезчур длинное условие получается. Хочется как-то автоматизировать программный код, сделать его более гибким что-ли.


 
Lika   (2004-04-12 14:55) [18]


> А план счетов банковский или "организаций и предприятий"?

План счетов предприятия.


 
Курдль ©   (2004-04-12 14:57) [19]


> План счетов предприятия.

И что, он у Вас не иерархический (древовидный)?
Тогда перепроектируйте БД, как я Вам и советовал!
Извлекать субсчета из их кода - методически неверно!


 
Lika   (2004-04-12 15:19) [20]


> Тогда перепроектируйте БД, как я Вам и советовал!

:)) А без этого никак нельзя :), потому что это тема уже отдельного разговора.
А меня интересует в принципе, как можно организовать такого рода запрос. Или это невозможно, неужели в SQL нет варианта на такой случай. :(


 
Курдль ©   (2004-04-12 15:22) [21]


> А меня интересует в принципе, как можно организовать такого
> рода запрос.

А чего Вы так прикипели к запросам? Напишите процедуру на серваке (это в идеале), кусок кода на клиенте (что тоже не плохо), "универсальный составитель запросов" (это уже прикол)...


 
Lika   (2004-04-12 15:46) [22]


> "универсальный составитель запросов" (это уже прикол)...

Это идея! Вот с этим запросом разберусь и начну :))(шутка)

> Напишите процедуру на серваке (это в идеале), кусок кода
> на клиенте (что тоже не плохо)

Процедур на серваке полно!:) Но эту проблему они не решают.
Мне нужно просто знать как сравнить значения поля с множеством символьного типа,но не точно,а "приблизительно".
Если кто знает подскажите пожалуйста, плиз.


 
serge35   (2004-04-12 15:47) [23]

К сожалению разработчики SQL не предусмотрели варианта для работы с планом счетов предприятия...


 
Курдль ©   (2004-04-12 15:48) [24]

В том числе не следует забывать, что кроме LIKE есть "... where substr(FIELD1, i, j) = :STRING1"


 
serge35   (2004-04-12 15:50) [25]

Простите, а как динамически определять длину символьной строки и позицию начала сравнения?


 
Курдль ©   (2004-04-12 15:54) [26]


> Простите, а как динамически определять длину символьной
> строки и позицию начала сравнения?

Это ко мне вопрос? Речь идет о сравнении бухгалтерских счетов типа "51_01_05", например, с целью выделить все субсчета этого счета типа "51_*".
В данном случае оперировать позициями и длинами удобнее.


 
serge35   (2004-04-12 16:41) [27]

Это для одного уровня иерархии. А дальше?
Глубина вложенности по условию не ограничена.


 
Lika   (2004-04-12 16:41) [28]


> В том числе не следует забывать, что кроме LIKE есть "...
> where substr(FIELD1, i, j) = :STRING1"

Большое спасибо!!! Это то что мне нужно, а почему-то об этом не подумала! Еще раз спасибо!



Страницы: 1 вся ветка

Текущий архив: 2004.04.11;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.028 c
3-1081396835
Серж
2004-04-08 08:00
2004.04.11
Как округлить число в процедуре Interbase?


14-1079459469
RealRascal
2004-03-16 20:51
2004.04.11
Учет трафффика


4-1079637405
3APA3A
2004-03-18 22:16
2004.04.11
Найти процесс...


1-1080056808
Andrew
2004-03-23 18:46
2004.04.11
Model Family Stepping???


14-1082187945
DCoder
2004-04-17 11:45
2004.04.11
WebApp с чего начать?