Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Упрощение запроса, БД Oracle 
:(
    Опции темы
Ybr
Дата 18.2.2012, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 4.3.2010
Где: Москва

Репутация: нет
Всего: нет



Доброго времени суток, господа!

По работе начал изучать PL/SQL. И в процессе написания одного запроса у меня появилась мысль, что туже функциональность обязательно можно реализовать проще, короче и красивее. Мой "некрасивый" запрос работает (sic!), но совершенно не нравятся его размеры. Интересно ваше мнение на тему: как можно сделать его короче.
Объяснять, что делает запрос, не вижу смысла:
Код

SELECT * 
  FROM account 
 WHERE code LIKE '40401%' 
    OR code LIKE '40402%' 
    OR code LIKE '40403%' 
    OR code LIKE '40404%' 
    OR code LIKE '40405%' 
    OR code LIKE '40406%' 
    OR code LIKE '40409%' 
    OR code LIKE '40410%' 
    OR code LIKE '40501%' 
    OR code LIKE '40502%' 
    OR code LIKE '40503%' 
    OR code LIKE '40504%' 
    OR code LIKE '40505%' 
    OR code LIKE '40601%' 
    OR code LIKE '40602%' 
    OR code LIKE '40603%' 
    OR code LIKE '40701%' 
    OR code LIKE '40702%' 
    OR code LIKE '40703%' 
    OR code LIKE '40704%' 
    OR code LIKE '40802%' 
    OR code LIKE '40817%' 
    OR code LIKE '423%' 
    OR code LIKE '421%' 
   AND ishidden <> ' ' 
   AND sysfilial = 46 
   AND label LIKE 'Комис%' 
   AND currency <> 1000001275 


В процессе оптимизации пытался сделать вот так:
Код

SELECT * 
  FROM account 
 WHERE code IN ('40401%', '40402%', '40403%', '40404%', '40405%', '40406%', 
        '40409%', '40410%', '40501%', '40502%', '40503%', '40504%', 
        '40505%', '40601%', '40602%', '40603%', '40701%', '40702%', 
        '40703%', '40704%', '40802%', '40817%', '423%', '421%') 
   AND ishidden <> ' ' 
   AND sysfilial = 46 
   AND label LIKE 'Комис%' 
   AND currency <> 1000001275 


Но после первого же прогона понял, что оператор IN не умеет работать с шаблонами (т.е. результирующего набора от второго скрипта не было, а от первого - был).

Каково ваше мнение: можно ли упростить запрос?
PM MAIL   Вверх
tzirechnoy
Дата 18.2.2012, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: 2
Всего: 16



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

Здесь дело в том, что IN -- это глупый хак и и издевательство над минимальностью языка. Никаких массивов в языке SQL нет, а в диалектах, в которых есть -- это ересь. В реляцыонной алгебре как таковой место массивов занимают отношэния. Но строить отношэния in-place в запросе тожэ нетривиально (хотя и можно, через таблицу вроде dual и UNION ALL).
PM MAIL   Вверх
Zloxa
Дата 18.2.2012, 15:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



Можно попробовать регексплайк. Но если работает - не понятно зачем пробовать.


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Ybr
Дата 18.2.2012, 18:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 4.3.2010
Где: Москва

Репутация: нет
Всего: нет



Цитата(Zloxa @ 18.2.2012,  15:43)
Можно попробовать регексплайк. Но если работает - не понятно зачем пробовать.

Очень даже понятно smile Хочется писать не только работающее, но и красиво выглядещее.
За напоминание про регэкспы спасибо. Они очень весело смотрятся на том фоне, что у языка даже нет массивов)))

Это сообщение отредактировал(а) Ybr - 18.2.2012, 18:33
PM MAIL   Вверх
Zloxa
Дата 18.2.2012, 22:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



Цитата(Ybr @  18.2.2012,  18:32 Найти цитируемый пост)
 но и красиво выглядещее.

Тогда ищите уродство за пределами запроса. Если бизнес логика требует хардкода  паттерна кода, или же приходится опирается на значение такого поля как label, или же поле, названное ishidden может принимать значение "пробел", это определенно означает, что структура данных крайне плохо организована.  smile 


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




[ Время генерации скрипта: 0.0427 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.