powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Поиск значения сразу в нескольких полях
20 сообщений из 20, страница 1 из 1
Поиск значения сразу в нескольких полях
    #39465080
Chukis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите, как цивильно и красиво можно решать вот такую задачу?
Есть таблица
select a1,b1,c1, a2,b2,c2 from table1

Надо выбрать только те строки, в которых трех значений из a1,b1,c1 нет в a2,b2,c2. Причем, последовательность значений в этих полях может быть разная.
...
Рейтинг: 0 / 0
Поиск значения сразу в нескольких полях
    #39465082
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SQL> select * from dual where cardinality(tp_int_table(1, 2, 3) multiset intersect tp_int_table(4, 5, 6)) = 0;

D
-
X

1 row selected.

SQL> select * from dual where cardinality(tp_int_table(1, 2, 3) multiset intersect tp_int_table(3, 4, 5)) = 0;

no rows selected
...
Рейтинг: 0 / 0
Поиск значения сразу в нескольких полях
    #39465083
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Или всех?
Код: plsql
1.
2.
3.
SQL> select * from dual where tp_int_table(1, 2, 3) <> tp_int_table(3, 2, 1);

no rows selected
...
Рейтинг: 0 / 0
Поиск значения сразу в нескольких полях
    #39465085
Chukis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Elic,
Ух ты, какие новые функции!!! tp_int_table и multiset intersect.
Если, честно, то не слышал про них. Надо будет почитать.)

Спасибо.
...
Рейтинг: 0 / 0
Поиск значения сразу в нескольких полях
    #39465088
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ChukisУх ты, какие новые функции!!! tp_int_table и multiset intersect.
Если, честно, то не слышал про них. Надо будет почитать.)RTFM Multiset Operations for Nested Tables (FAQ)
...
Рейтинг: 0 / 0
Поиск значения сразу в нескольких полях
    #39465098
Chukis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Elic,

a tp_int_table можно использовать только в PL/SQL конструкциях?
В простом select у меня выдает invalid identifier
...
Рейтинг: 0 / 0
Поиск значения сразу в нескольких полях
    #39465407
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Chukisу меня выдает invalid identifierВидно не в коня корм...
Код: plsql
1.
2.
SQL> DESC tp_int_table
 tp_int_table TABLE OF NUMBER(38)

...
Рейтинг: 0 / 0
Поиск значения сразу в нескольких полях
    #39465435
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
среди значений a1 b1 c1 есть повторения?
...
Рейтинг: 0 / 0
Поиск значения сразу в нескольких полях
    #39465447
Chukis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andreymx,
Нет, среди a1,b1,c1 одинаковых быть не может, кроме ситуаций, когда там null.
...
Рейтинг: 0 / 0
Поиск значения сразу в нескольких полях
    #39465478
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Chukis,

А можешь примерчик дать .... уж даже интерестно стало
...
Рейтинг: 0 / 0
Поиск значения сразу в нескольких полях
    #39465488
Chukis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MaximaXXL,

Например:

numa b c a1b1c111233122513 3231 3454231123

Надо через select оставить только 2 и 3 строку
...
Рейтинг: 0 / 0
Поиск значения сразу в нескольких полях
    #39465536
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Chukis,

Очень мне понравилось решение которое пердложил Elic (проверю когда бцдц на работе)

Но если по быстрому то вот пара вариантов
Код: plsql
1.
2.
3.
4.
5.
6.
select * from table1
where 
not(nvl(a,-1) in (nvl(a1,-1),nvl(b1,-1),nvl(c1,-1))
and nvl(b,-1) in (nvl(a1,-1),nvl(b1,-1),nvl(c1,-1))
and nvl(c,-1) in (nvl(a1,-1),nvl(b1,-1),nvl(c1,-1))
)


и
Код: plsql
1.
2.
3.
4.
5.
6.
select * from table1
where not(
    greatest(nvl(a,-1),nvl(b,-1),nvl(c,-1)) = greatest(nvl(a1,-1),nvl(b1,-1),nvl(c1,-1))
and nvl(a,-1)+nvl(b,-1)+nvl(c,-1) = nvl(a1,-1)+nvl(b1,-1)+nvl(c1,-1)
and least(nvl(a,-1),nvl(b,-1),nvl(c,-1)) = least(nvl(a1,-1),nvl(b1,-1),nvl(c1,-1))
)


это все при условии что -1 не встречается в данных иначе надо null-значение менять на что-то ..., оба запроса могут быть проще если понять что делать с null для обеих сторон
ну и так как я писал это без базы, могут быть мелкие нюансы, но должно работать
...
Рейтинг: 0 / 0
Поиск значения сразу в нескольких полях
    #39466423
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Chukis,
похожая тема
Объединение столбцов

.....
stax
...
Рейтинг: 0 / 0
Поиск значения сразу в нескольких полях
    #39466505
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Анпивот + лист_егг
...
Рейтинг: 0 / 0
Поиск значения сразу в нескольких полях
    #39466543
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymxАнпивот + лист_егг
если честно, то про лист_егг не понял

.....
stax
...
Рейтинг: 0 / 0
Поиск значения сразу в нескольких полях
    #39467376
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax..andreymxАнпивот + лист_егг
если честно, то про лист_егг не понял

.....
stax
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
with t as(
select 1 num, 1 a, 2 b, 3 c, 3 a1, 1 b1, 2 c1 from dual union all
select 2 num, 1 a, null b, 3 c, 3 a1, 1 b1, 2 c1 from dual
)
select num,
       listagg(a,  '=') within group(order by a ) a,
       listagg(a1, '=') within group(order by a1) a1
from(
select num, a, a1 from t union all
select num, b, b1 from t union all
select num, c, c1 from t
)
group by num

что-то вроде этого (+ where)nUMAA111=2=31=2=321=31=2=3
...
Рейтинг: 0 / 0
Поиск значения сразу в нескольких полях
    #39467377
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это просто пример, не в работу :)
...
Рейтинг: 0 / 0
Поиск значения сразу в нескольких полях
    #39467405
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymx,

Я так понял Вы хотели написать так:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
with t as(
select 1 num, 1 a, 2 b, 3 c, 3 a1, 1 b1, 2 c1 from dual union all
select 2 num, 1 a, null b, 3 c, 3 a1, 1 b1, 2 c1 from dual
)

select  num,
       listagg(a,  '=') within group(order by a ) a,
       listagg(a1, '=') within group(order by a1) a1
from t
UNPIVOT INCLUDE NULLS ((a,a1) for sk in ((a, a1) as 1, (b, b1) as 2, (c, c1) as 3))

group by num
...
Рейтинг: 0 / 0
Поиск значения сразу в нескольких полях
    #39467519
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и тогда можно финализировать как-то так:
Код: plsql
1.
2.
3.
4.
5.
select  num
from t
UNPIVOT INCLUDE NULLS ((a,a1) for sk in ((a, a1) as 1, (b, b1) as 2, (c, c1) as 3))
group by num
having listagg(a,  '=') within group(order by a ) != listagg(a1, '=') within group(order by a1)



Но все равно автором темы не раскрыто поведение с null
...
Рейтинг: 0 / 0
Поиск значения сразу в нескольких полях
    #39467522
trace.log
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MaximaXXL,

автор переваривает ответы
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Поиск значения сразу в нескольких полях
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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