Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / В Where аналог 1=1 (ase 12.5) / 14 сообщений из 14, страница 1 из 1
13.04.2011, 10:16
    #37213525
Imperous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В Where аналог 1=1 (ase 12.5)
Всем привет!
Есть ли в АСЕ что-то более правильное чем
Код: plaintext
select * from table1 where  1 = 1  
?
т.е. срабатывания условия истина
...
Рейтинг: 0 / 0
13.04.2011, 10:44
    #37213599
Imperous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В Where аналог 1=1 (ase 12.5)
и еще дополнительный вопрос примерно в этом же ракурсе:
как сделать подстановку в where?
например
Код: plaintext
1.
2.
3.
select * from table1 
where field1 =  5  and
(если моя_переменная1 = "ок" тогда field2 = field2 иначе field2 = "не все ок") and
(если моя_переменная2 = "пуск" тогда field3 = field3 иначе field3 = "не полетели")

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

думаю правильно передал мысль
...
Рейтинг: 0 / 0
13.04.2011, 10:48
    #37213608
Imperous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В Where аналог 1=1 (ase 12.5)
сразу оговорюсь - склеивать строку типа:

Код: plaintext
1.
2.
3.
4.
5.
6.
declare @m_per char( 250 )

select @m_per = "select * from table1 "
select @m_per = @m_per + " where field1 = 5 and " 
select @m_per = @m_per + тут описывать все необходимые подстановки

exec(@m_per)


я не хочу, слишком уж большой запрос на самом деле
...
Рейтинг: 0 / 0
13.04.2011, 11:43
    #37213750
Alexandr Nikolaev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В Where аналог 1=1 (ase 12.5)
Код: plaintext
1.
2.
3.
4.
select * from table1
where
(@variable1 = "ок" and field2 = field2 or @variable1 <> "ок" and field2 = "не все ок") and
(@variable2 = "пуск" and field3 = field3 or @variable2 <> "пуск" and field3 = "не полетели") and
...
Рейтинг: 0 / 0
13.04.2011, 12:42
    #37213889
Ggg_old
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В Where аналог 1=1 (ase 12.5)
еще интересно, как деревянный асешный оптимизатор будет строить план такого полудинамического запроса, особенно если он внутрях хранимки.
...
Рейтинг: 0 / 0
13.04.2011, 13:03
    #37213941
Imperous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В Where аналог 1=1 (ase 12.5)
Alexandr Nikolaev - пасиб, сработало и достаточно быстро :)
Ggg_old - та вроде справляется :)
...
Рейтинг: 0 / 0
13.04.2011, 13:54
    #37214106
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В Where аналог 1=1 (ase 12.5)
On 13.04.2011 11:16, Imperous wrote:

> Есть ли в АСЕ что-то более правильное чем
>
> select *from table1where *1*=*1*
>
> ?
> т.е. срабатывания условия истина

Есть.

select * from table1

Но в общем и where 1 = 1 ничем не плохо.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
13.04.2011, 13:55
    #37214114
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В Where аналог 1=1 (ase 12.5)
On 13.04.2011 11:48, Imperous wrote:

> declare @m_perchar(*250*)
>
> select @m_per ="select * from table1"
> select @m_per = @m_per +" where field1 = 5 and"
> select @m_per = @m_per + тут описывать все необходимые подстановки
>
> exec(@m_per)
>
>
>
> я не хочу, слишком уж большой запрос на самом деле

Так и надо склеивать. Но только на клиенте.
А формировать общий запрос с никогда не работающими условиями -- плохо,
получите плохо оптимизируемый запрос.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
13.04.2011, 13:58
    #37214125
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В Where аналог 1=1 (ase 12.5)
On 13.04.2011 12:43, Alexandr Nikolaev wrote:

> select *from table1
> where
> (@variable1 ="ок" and field2 = field2or @variable1<> "ок" and field2 ="не все ок")and
> (@variable2 ="пуск" and field3 = field3or @variable2<> "пуск" and field3 ="не полетели")and

Писать такие запросы -- очень плохой стиль. Они будут плохо оптимизироваться.
Тем более, что тут "отмирает" условие JOIN-а, это вообще такие тормоза можно
огрести, что ни дай боже. Потрудитесь лучше, на клиенте повыкидывайте лишние
условия, сбейте конечный запрос и отдайте серверу.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
13.04.2011, 13:59
    #37214130
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В Where аналог 1=1 (ase 12.5)
On 13.04.2011 14:03, Imperous wrote:

> *Alexandr Nikolaev *- пасиб, сработало и достаточно быстро :)
> *Ggg_old *- та вроде справляется :)

Это может СЕЙЧАС быстро. А потом будет медленно.
Сиюминутная быстрота и даже хороший план запроса тут -- не
показатели, к сожалению.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
13.04.2011, 14:23
    #37214224
Alexandr Nikolaev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В Where аналог 1=1 (ase 12.5)
MasterZivТем более, что тут "отмирает" условие JOIN-агде в
Код: plaintext
select * from table1 where...
условие JOIN-а ???
...
Рейтинг: 0 / 0
13.04.2011, 15:52
    #37214521
Imperous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В Where аналог 1=1 (ase 12.5)
в этом примере джойнов не видно, но они там на самом деле есть

MasterZivOn 13.04.2011 11:16, Imperous wrote:

> Есть ли в АСЕ что-то более правильное чем
>
> select *from table1where *1*=*1*
>
> ?
> т.е. срабатывания условия истина

Есть.

select * from table1

Но в общем и where 1 = 1 ничем не плохо.

а что есть?
...
Рейтинг: 0 / 0
14.04.2011, 11:23
    #37215938
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В Where аналог 1=1 (ase 12.5)
On 13.04.2011 15:23, Alexandr Nikolaev wrote:
> Тем более, что тут "отмирает" условие JOIN-а
>
> где в
>
> select *from table1where...
>
> условие JOIN-а ???


select * from table1
where
(@variable1 = "ок" and field2 = field2 or @variable1 <> "ок" and field2 =
"не все ок") and
(@variable2 = "пуск" and field3 = field3 or @variable2 <> "пуск" and
field3 = "не полетели") and


Нет ?

Если нет, то тогда поясни глубокий смысл такого запроса.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
14.04.2011, 13:32
    #37216303
Alexandr Nikolaev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В Where аналог 1=1 (ase 12.5)
MasterZivНет ?
Если нет, то тогда поясни глубокий смысл такого запроса.
Топиккастер привёл запрос по одной таблице, какой смысл он в него вкладывал его дело.
В дальнейшем оказалось что
Imperousв этом примере джойнов не видно, но они там на самом деле есть
и вы MasterZiv правы что мной вариант будет "съедать" MasterZivусловие JOIN-а.
Думаю что топиккастеру полезнее было бы оформить как:
Есть таблицы (скрипты на создание с "ключами" + "индексами")

Необходимо то-то.
...
Рейтинг: 0 / 0
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / В Where аналог 1=1 (ase 12.5) / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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