powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Перебор определенных полей через или в sql запросе
25 сообщений из 26, страница 1 из 2
Перебор определенных полей через или в sql запросе
    #39562633
Зурбаган
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет!
У меня база на Oracle 10g.
В базе есть таблица с полям id,a1,b1,c1,d1,a2,b2,c2 (причем кол-во полей a..d под разными цифрами различается).
Часто приходится выполнять поиск определенного значения сразу по всем полям с определенной цифрой.

Например, выполнять такое выражение (a1=1 or b1=2 or c1=1 or d1=1).
Возможно ли реализовать функцию, в которую в sql предложении подавать только a1=1, а она уже будет преобразовывать в (a1=1 or b1=2 or c1=1 or d1=1) ?
...
Рейтинг: 0 / 0
Перебор определенных полей через или в sql запросе
    #39562638
Фотография шК0ДЕР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зурбаган, динамический SQL?
...
Рейтинг: 0 / 0
Перебор определенных полей через или в sql запросе
    #39562651
Фотография Fogel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно.
А можно и без, подготовив шаблон (и если таблица огромная, то сделав функциональные индексы по полям склейки):
Код: plsql
1.
2.
3.
4.
5.
6.
7.
with arr as (select a1||b1||..||n1 as one, t.* from table t
union all
select a2||b2||..||n2 as two, t.* from table 
..
union all
select an||bn||..||nn as n, t.* from table) 
select * from t where t.two like '%значение%'
...
Рейтинг: 0 / 0
Перебор определенных полей через или в sql запросе
    #39562668
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fogel,

Будешь клеить без разделителя, чтобы потом не отличить мух от котлет?
...
Рейтинг: 0 / 0
Перебор определенных полей через или в sql запросе
    #39562670
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fogel,

Как связаны секция with и таблица t с полем two в твоём примере?
В целом пример просто образец - как не надо делать. От непонимания как работают алиасы и объединение множеств, до потери области видимости.

Не говоря уж о том, что задачу ТС подобный запрос не решает.

Ответ шК0ДЕР куда ближе к истине.
...
Рейтинг: 0 / 0
Перебор определенных полей через или в sql запросе
    #39562678
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зурбаган,

Шутки для, забавы ради. На 10g не уверен, что прокатит.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
create table test.dropme_t as  
select dummy d1, dummy d2, dummy d3 from dual;
union all
select 'Y','Y','X' from dual;

select x.getStringVal()
from xmltable('for $i in fn:collection("oradb:/TEST/DROPME_T")
                 where $i/ROW/* = "X"
                 return $i') x;

drop table test.dropme_t purge;
...
Рейтинг: 0 / 0
Перебор определенных полей через или в sql запросе
    #39562683
полба
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plsql
1.
2.
3.
select *
from таблица
where (хто, значение) in ((1, a1), (1, b1), (2, a2), (2, b2), (2, c2), ...);
...
Рейтинг: 0 / 0
Перебор определенных полей через или в sql запросе
    #39562688
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
env,

Код: plsql
1.
 dummy d3 from dual;


лишнее
...
Рейтинг: 0 / 0
Перебор определенных полей через или в sql запросе
    #39562689
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зурбаган,

создаете вью (в прімере v)
запрос будет выглядеть как select from v where x member (y)

за лентяйство придется платить производительностью (возможно будут тормоза)
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
  1  with t as (
  2  select 1 id,1 a1,1 a2,1 an from dual union all
  3  select 2 id,2 a1,2 a2,2 an from dual union all
  4  select 3 id,2 a1,1 a2,null a3 from dual
  5  )
  6  ,v as (select 1 id,a1,a2,an,ora_mining_number_nt(a1,a2,an) o from t)
  7* select id,a1,a2,an from v where 1 member(o)
SQL> /

        ID         A1         A2         AN
---------- ---------- ---------- ----------
         1          1          1          1
         1          2          1 null



....
stax
...
Рейтинг: 0 / 0
Перебор определенных полей через или в sql запросе
    #39562690
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зурбаган,

В продолжение шутки
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
create table dropme_t as  
select dummy a1, dummy b1, dummy c1 from dual
union all
select 'Y','Y','X' from dual;

select x.getStringVal()
from xmltable('for $i in fn:collection("oradb:/TEST/DROPME_T")
                 where $i/ROW/*[ends-with(name(),"1")] = "X"
                 return $i') x;

drop table dropme_t purge;
...
Рейтинг: 0 / 0
Перебор определенных полей через или в sql запросе
    #39562693
Фотография Fogel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
envFogel,
Как связаны секция with и таблица t с полем two в твоём примере?
Вот так:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
with arr as (select t1.a1||t1.b1||..||t1.n1 as one, t1.* from table t1
union all
select t2.a2||t2.b2||..||t2.n2 as two, t2.* from table t2
..
union all
select tn.an||tn.bn||..||tn.nn as n, tn.* from table tn) 
select * from arr where arr.two like '%значение%'



В целом пример критики просто образец непонимания замысла. ))

AmKadБудешь клеить без разделителя, чтобы потом не отличить мух от котлет?
если вместо * перечислить поля, так понятней?
Код: plsql
1.
select t2.a2||t2.b2||..||t2.n2 as two, t2.a2, t2.b2,..., t2.n2 from table t2
...
Рейтинг: 0 / 0
Перебор определенных полей через или в sql запросе
    #39562695
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полба
Код: plsql
1.
2.
3.
select *
from таблица
where (хто, значение) in ((1, a1), (1, b1), (2, a2), (2, b2), (2, c2), ...);



я так понял что Зурбаган-у лень в запросе перечислять a1, b1, a2, b2, c2 ...

.....
stax
...
Рейтинг: 0 / 0
Перебор определенных полей через или в sql запросе
    #39562697
Фотография Fogel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
о, Stax точней выразился.
...
Рейтинг: 0 / 0
Перебор определенных полей через или в sql запросе
    #39562701
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FogelВ целом пример критики просто образец непонимания замысла
В целом пример продолжения тупежа просто образец воинственного ламерства.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
with t as (
  select d.dummy||d.dummy||d.dummy as ONE, d.* from dual d 
  union all
  select d.dummy||d.dummy||d.dummy as TWO, d.* from dual d)
select *
from t
where t.TWO is not null;

SQL Error: ORA-00904: "T"."TWO": недопустимый идентификатор
00904. 00000 -  "%s: invalid identifier"



И фразу AmKad ты тоже не понял.
...
Рейтинг: 0 / 0
Перебор определенных полей через или в sql запросе
    #39562703
Staxя так понял что Зурбаган-у лень в запросе перечислять a1, b1, a2, b2, c2 ...select '('||ltrim(column_name, rtrim(column_name, '1234567890'))||','||column_name||'),' from dba_tab_columns
...
Рейтинг: 0 / 0
Перебор определенных полей через или в sql запросе
    #39562706
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fogelтак понятней?

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
SQL> ed
Wrote file afiedt.buf

  1  with t as (
  2  select 1 id,1 a1,11 a2,111 an from dual union all
  3  select 2 id,11 a1,11 a2,11 an from dual union all
  4  select 3 id,111 a1,null a2,111 a3 from dual )
  5* select id,a1||a2||an s,a1,a2,an from t
SQL> /

        ID S                            A1         A2         AN
---------- -------------------- ---------- ---------- ----------
         1 111111                        1         11        111
         2 111111                       11         11         11
         3 111111                      111 null              111



.....
stax
...
Рейтинг: 0 / 0
Перебор определенных полей через или в sql запросе
    #39562715
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
where owner table_name column_na,

можно и через || но с разделителями и тогда where instr(','||значение||',' s) > 0

.....
stax
...
Рейтинг: 0 / 0
Перебор определенных полей через или в sql запросе
    #39562721
Фотография Fogel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
envFogelВ целом пример критики просто образец непонимания замысла
В целом пример продолжения тупежа просто образец воинственного ламерства.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
with t as (
  select d.dummy||d.dummy||d.dummy as ONE, d.* from dual d 
  union all
  select d.dummy||d.dummy||d.dummy as TWO, d.* from dual d)
select *
from t
where t.TWO is not null;

SQL Error: ORA-00904: "T"."TWO": недопустимый идентификатор
00904. 00000 -  "%s: invalid identifier"



И фразу AmKad ты тоже не понял.
dual?

ну могли бы ещё в пример вместо конкретной таблицы пакет вставить или баш-скрипт, и показать ошибку.

AmKad не понял, что рядом со склейкой будут отдельные значения, сам факт возврата строки, значит значение найдено.
если только id нужен, так вместо t.* можно написать t.id, ну или перечислить колонки с нужными цифрами.

Стакс, однако, лучше написал - он сечёт фишку. а вы, енв, нет - только ругаетесь.
...
Рейтинг: 0 / 0
Перебор определенных полей через или в sql запросе
    #39562724
Фотография Fogel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StaxFogelтак понятней?

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
SQL> ed
Wrote file afiedt.buf

  1  with t as (
  2  select 1 id,1 a1,11 a2,111 an from dual union all
  3  select 2 id,11 a1,11 a2,11 an from dual union all
  4  select 3 id,111 a1,null a2,111 a3 from dual )
  5* select id,a1||a2||an s,a1,a2,an from t
SQL> /

        ID S                            A1         A2         AN
---------- -------------------- ---------- ---------- ----------
         1 111111                        1         11        111
         2 111111                       11         11         11
         3 111111                      111 null              111


окей. теперь ясно.

.....
stax
...
Рейтинг: 0 / 0
Перебор определенных полей через или в sql запросе
    #39562731
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fogelну могли бы ещё в пример вместо конкретной таблицы пакет вставить или баш-скрипт, и показать ошибку.
Т.е. для тебя так и не дошло, что твой алиас two в union all дальше своего стейтмента не пройдёт?

Продолжай упорствовать в проявлении своего ламерства дальше. Или задумайся и всё-таки попробуй понять, что же тебе написали.
...
Рейтинг: 0 / 0
Перебор определенных полей через или в sql запросе
    #39562735
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FogelAmKad не понял, что рядом со склейкой будут отдельные значения
И сколько дублей одной строки ты планируешь вернуть в результате?
...
Рейтинг: 0 / 0
Перебор определенных полей через или в sql запросе
    #39562749
Фотография Fogel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
envFogelну могли бы ещё в пример вместо конкретной таблицы пакет вставить или баш-скрипт, и показать ошибку.
Т.е. для тебя так и не дошло, что твой алиас two в union all дальше своего стейтмента не пройдёт?

Продолжай упорствовать в проявлении своего ламерства дальше. Или задумайся и всё-таки попробуй понять, что же тебе написали.
Стакс как-то понятней пишет - его понял. вашу злость - нет.
...
подумал.
думаю, у вас много желчи. такие сообщения понимать не хочется при всём желании.
но поскольку у вас свербит от нерадивой "молодёжи" вроде меня, то я специально для вас, дабы вы обрели благодать, переписал бы вот так (хотя без разделителей все равно не правильно):
Код: plsql
1.
2.
3.
4.
5.
6.
7.
with arr as (select _1_||t1.a1||t1.b1||..||t1.n1 as env, t1.* from table t1
union all
select _2_||t2.a2||t2.b2||..||t2.n2, t2.* from table t2
..
union all
select _n_||tn.an||tn.bn||..||tn.nn as n, tn.* from table tn) 
select * from arr where arr.env like '%значение%'
...
Рейтинг: 0 / 0
Перебор определенных полей через или в sql запросе
    #39562751
Фотография Fogel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
envFogelAmKad не понял, что рядом со склейкой будут отдельные значения
И сколько дублей одной строки ты планируешь вернуть в результате?
ровно n
...
Рейтинг: 0 / 0
Перебор определенных полей через или в sql запросе
    #39562761
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fogelдабы вы обрели благодать, переписал бы вот так
Fogelровно n
А теперь, дабы я уж точно обрёл благодать, подумай ещё немного.

Какая польза для спросившего от твоего однозначно неработающего запроса, который не проверен даже на выборке из dual, работает только для одного вырожденного случая и то случайно, и возвращает дубли строк?

Кроме головной боли в попытках сделать из этого говна конфетку - никакой.

Поэтому, ну не бросайся ты писать "что-то", не сделав нормальный тест-кейс на бурундуках и кошках (dual).
...
Рейтинг: 0 / 0
Перебор определенных полей через или в sql запросе
    #39562784
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fogelа тут вроде пытались помочь, хоть и ошиблись.
В русском языке для этого целая идиома есть - медвежья услуга.
...
Рейтинг: 0 / 0
25 сообщений из 26, страница 1 из 2
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Перебор определенных полей через или в sql запросе
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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