powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Запрос в операторе Like
23 сообщений из 23, страница 1 из 1
Запрос в операторе Like
    #39326972
Ishtvan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет.

Скажите пожалуйста реально ли использовать такую конструкцию:

select * from table1 where column1 like '%(select column2 from table2)%'


Если нет, то есть ли альтернатива.

Сорри за ламмерство, если можно помогите плиз.

Спасибо,
...
Рейтинг: 0 / 0
Запрос в операторе Like
    #39326978
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Запрос в операторе Like
    #39326979
Ishtvan,

Код: plsql
1.
select * from dual d1 where d1.dummy like '%'||(select dummy from dual d2 where rownum<=1)||'%'
...
Рейтинг: 0 / 0
Запрос в операторе Like
    #39326983
Elic (Dobrii edition),
Для сравнения колонок в разных таблицах, пример:
Код: plsql
1.
2.
3.
select a1.table_name,a2.table_name
from all_tables a1,all_tables a2 
where a1.table_name like '%'||a2.table_name||'%' and a1.table_name!=a2.table_name
...
Рейтинг: 0 / 0
Запрос в операторе Like
    #39326992
Ishtvan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Блин, как же я вам всем благодарен!!!Спасибо большое все получилось!!!!
...
Рейтинг: 0 / 0
Запрос в операторе Like
    #39327052
Ishtvan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А скажите плиз если в '%(select column2 from table2)%' будут несколько значений, можно ли использовать что-то типа

like in


Спасибо!
...
Рейтинг: 0 / 0
Запрос в операторе Like
    #39327058
exists
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ishtvan,

можно
...
Рейтинг: 0 / 0
Запрос в операторе Like
    #39327078
Ishtvan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пробую

select * from table1 where column1 like in '%(select column2 from table2)%'

Пишет ORA-00936 missing expression
...
Рейтинг: 0 / 0
Запрос в операторе Like
    #39327084
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IshtvanПробую

select * from table1 where column1 like in '%(select column2 from table2)%'

Пишет ORA-00936 missing expression
не выдумывайте синтаксис, которого таки нет
...
Рейтинг: 0 / 0
Запрос в операторе Like
    #39327086
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IshtvanПробуюСперва на имя отвечающего посмотри.
...
Рейтинг: 0 / 0
Запрос в операторе Like
    #39327107
Ishtvan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите с синтаксисом?
...
Рейтинг: 0 / 0
Запрос в операторе Like
    #39327115
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IshtvanПодскажите с синтаксисом?

ответы читайте внимательно
и поиском пользуйтесь, например
...
Рейтинг: 0 / 0
Запрос в операторе Like
    #39327122
Valergrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Like in синтаксиса в оракле нет. Можно сделать либо просто in - но тогда проверка на равенство. Либо like - но тогда только один паттерн.

В твоем случае, я бы, возможно, сначала склеил строку listagg с какими-то разделителями, а потом использовал regexp_like для того чтобы найти искомое. Это тебе такая подсказка, попробуй сам разобраться.
...
Рейтинг: 0 / 0
Запрос в операторе Like
    #39327139
like in в oracle есть:
Код: plsql
1.
2.
3.
select * from table1 where column1 like in '%(select column2 from table2)%'
==
select * from table1,table2 where column1 like '%'||column2||'%'
...
Рейтинг: 0 / 0
Запрос в операторе Like
    #39327219
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elic 2.0 new generationlike in в oracle есть:
Код: plsql
1.
2.
3.
select * from table1 where column1 like in '%(select column2 from table2)%'
==
select * from table1,table2 where column1 like '%'||column2||'%'



Еlic такую чушь никогда бы не написал. Медитируй над разницей между IN и JOIN. А пока забаню твой IP за дискредитацию.

SY.
...
Рейтинг: 0 / 0
Запрос в операторе Like
    #39327231
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ValergradВ твоем случае, я бы, возможно, сначала склеил строку listagg с какими-то разделителями, а потом использовал regexp_like для того чтобы найти искомое. Это тебе такая подсказка, попробуй сам разобраться.

Бред. Обыкновенный EXISTS:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
select  *
  from  table1
  where exists (
                select  1
                  from  table2
                  where table1.column1 like '%' || table2.column2 || '%'
               )
/



SY.
...
Рейтинг: 0 / 0
Запрос в операторе Like
    #39327276
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYБред.
Да ладно, чем regexp с условием "или" не вариант-то в некоторых случаях?
...
Рейтинг: 0 / 0
Запрос в операторе Like
    #39327318
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Арсеньев Да ладно, чем regexp с условием "или" не вариант-то в некоторых случаях?

А куда его воткнуть если не в subquery c exists? Т.e. получим те-же яйца

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
select  *
  from  table1
  where exists (
                select  1
                  from  table2
                  where regexp_like(table1.column1,table2.column2)
               )
/



причем в общем случае как LIKE так и regexp_like пoтpебует экранирования спец символов (правда в LIKE их всего два).

SY.
...
Рейтинг: 0 / 0
Запрос в операторе Like
    #39327978
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYА куда его воткнуть если не в subquery c exists?
Один раз собрать строку условие и применить ко всем строкам table1.
Не обязательно это будет лучше.
...
Рейтинг: 0 / 0
Запрос в операторе Like
    #39328064
Valergrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY, это не бред, а вариант, который производительней в большинстве реальных кейсов. Подумайте 2 минутки и поймете - почему.
...
Рейтинг: 0 / 0
Запрос в операторе Like
    #39328169
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ValergradSY, это не бред, а вариант, который производительней в большинстве реальных кейсов. Подумайте 2 минутки и поймете - почему.

Включи мозг. Например в table2 две строки c column2 мент и коп a в table1 строкa c column1 постамент. Ты предлaгаешь что-то типа:

Код: plsql
1.
'постамент' LIKE '%мент,коп%'



А надо:

Код: plsql
1.
 'постамент' LIKE '%мент%' OR 'постамент' LIKE '%коп%'



Если ты о REGEXP:

Код: plsql
1.
REGEXP_LIKE('постамент','мент|коп')



Тo то ограничение на паттерн 512 байт.

SY.
...
Рейтинг: 0 / 0
Запрос в операторе Like
    #39328189
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYТo то ограничение на паттерн 512 байт.

SY.
И главное, не похоже, чтоб Oracle один раз компилировал автомат и прогонял по нему все записи. Скорее вся regexp_like прогоняется к каждой записи. Хотя возможно это и мое заблуждение.
...
Рейтинг: 0 / 0
Запрос в операторе Like
    #39328902
Valergrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, был неправ. regexp_like работает небыстро.
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Запрос в операторе Like
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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