powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / задачка (можно ли как-то иначе)
25 сообщений из 27, страница 1 из 2
задачка (можно ли как-то иначе)
    #39513265
инфера
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
есть данные типа

table1

f1 f21 a2 b3 c

table2

f1 f21 b2 c3 c2 b4 e

надо выбрать такие записи table2 где одно поле из значений которые есть в table1, а второе нет (не оба)

решение влоб

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
select f1, f2
from
(
select f1,f2
from table1
minus
select f1,f2
from table2
)
where 
f1 in (select f1 from table1)
and
f2 in (select f2 from table1)



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

ожидаемый релзультат

f1 f21 b2 c
...
Рейтинг: 0 / 0
задачка (можно ли как-то иначе)
    #39513269
инфера
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
инфера
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
select f1, f2
from
(
select f1,f2
from table1
minus
select f1,f2
from table2
)
where 
f1 in (select f1 from table1)
and
f2 in (select f2 from table1)




сорри, запрос неправильный
можете не смотреть
...
Рейтинг: 0 / 0
задачка (можно ли как-то иначе)
    #39513270
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
инфера,

тебе нужны значения, которые существуют и не существуют.
...
Рейтинг: 0 / 0
задачка (можно ли как-то иначе)
    #39513272
инфера
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
инферасорри, запрос неправильный
можете не смотреть

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
вот так результат правильный

[SRC oracle]with t1(f1, f2) as
(
select 1, 'a' from dual union all
select 2, 'b' from dual union all
select 3, 'c' from dual
)
,t2(f1, f2) as
(
select 1, 'b' from dual union all
select 2, 'c' from dual union all
select 3, 'c' from dual union all
select 2, 'b' from dual union all
select 4, 'e' from dual
)
 select f1, f2
from
(
  select f1,f2
  from t2
  minus
  select f1,f2
  from t1
)
where 
f1 in (select f1 from t1)
and
f2 in (select f2 from t1) 


[/SRC]
...
Рейтинг: 0 / 0
задачка (можно ли как-то иначе)
    #39513277
инфера
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
boobyинфера,

тебе нужны значения, которые существуют и не существуют.

существует одно из двух (не 2 и не 0), любое
множества значений не пересекаются, не может быть пар [1, 1] или [b, c]
...
Рейтинг: 0 / 0
задачка (можно ли как-то иначе)
    #39513283
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
инфера,

не понял, кого и где нет, назовите поля в табличках по разному и легче будет описать что надо

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
  1  with t1 (f1,f2) as (
  2  select 1,   'a' from dual union all
  3  select 2,   'b' from dual union all
  4  select 3,   'c' from dual)
  5  ,t2 (f1, f2) as (
  6  select 1,   'b' from dual union all
  7  select 2,   'c' from dual union all
  8  select 3,   'c' from dual union all
  9  select 2,   'b' from dual union all
 10  select 4,   'e'from dual)
 11  select t2.* from t2,t1 --distinct ???
 12* where t2.f1=t1.f1 and t2.f2<>t1.f2
 13  /

        F1 F
---------- -
         1 b
         2 c




.....
stax
...
Рейтинг: 0 / 0
задачка (можно ли как-то иначе)
    #39513284
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
инфера,

Типа так?
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
with table1 as (select 1 f1, 'a' f2 from dual union all
select 2 f1, 'b' f2 from dual union all
select 3 f1, 'c' f2 from dual)
,table2 as (select 1 f1, 'b' f2 from dual union all
select 2 f1, 'c' f2 from dual union all
select 3 f1, 'c' f2 from dual union all
select 2 f1, 'b' f2 from dual union all
select 4 f1, 'e' f2 from dual)

select t2.* from table1 t1, table2 t2
where t1.f1 = t2.f1
and t1.f2 != t2.f2
...
Рейтинг: 0 / 0
задачка (можно ли как-то иначе)
    #39513289
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
инфера
Код: plsql
1.
вот так результат правильный

(4,a)?
...
Рейтинг: 0 / 0
задачка (можно ли как-то иначе)
    #39513290
Озо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
инфера,

not exists where f1=f1 and f2=f2
and (exists where f1=f1
or exists where f2=f2)
...
Рейтинг: 0 / 0
задачка (можно ли как-то иначе)
    #39513292
Landgraf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
With Table1 as
       (select 1 as f1, 'a' as f2 from dual
        union
        select 2 as f1, 'b' as f2 from dual
        union
        select 3 as f1, 'c' as f2 from dual),
      Table2 as
        (select 1 as f1, 'b' as f2 from dual
        union
        select 2 as f1, 'c' as f2 from dual
        union
        select 3 as f1, 'c' as f2 from dual 
        union
        select 2 as f1, 'b' as f2 from dual
        union
        select 4 as f1, 'e' as f2 from dual) 
        
select * from Table2 T2
       where exists (select * from Table1 T1 where T1.f1 = T2.f1 and T1.f2<>T2.f2)
          
...
Рейтинг: 0 / 0
задачка (можно ли как-то иначе)
    #39513296
Озо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Elic,

И откуда же такое, при условии
авторнадо выбрать такие записи table2
...
Рейтинг: 0 / 0
задачка (можно ли как-то иначе)
    #39513327
инфера
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MaximaXXLинфера,

Типа так?
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
with table1 as (select 1 f1, 'a' f2 from dual union all
select 2 f1, 'b' f2 from dual union all
select 3 f1, 'c' f2 from dual)
,table2 as (select 1 f1, 'b' f2 from dual union all
select 2 f1, 'c' f2 from dual union all
select 3 f1, 'c' f2 from dual union all
select 2 f1, 'b' f2 from dual union all
select 4 f1, 'e' f2 from dual)

select t2.* from table1 t1, table2 t2
where t1.f1 = t2.f1
and t1.f2 != t2.f2



не работает если чуток добавить данных

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
with t1(f1, f2) as
(
select 1, 'a' from dual union all
select 2, 'b' from dual union all
select 2, 'x' from dual union all -- вот
select 3, 'c' from dual
)
....



а также должно работать в обе стороны
а не только t1.f2 != t2.f2
...
Рейтинг: 0 / 0
задачка (можно ли как-то иначе)
    #39513338
инфера
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Landgraf
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
With Table1 as
       (select 1 as f1, 'a' as f2 from dual
        union
        select 2 as f1, 'b' as f2 from dual
        union
        select 3 as f1, 'c' as f2 from dual),
      Table2 as
        (select 1 as f1, 'b' as f2 from dual
        union
        select 2 as f1, 'c' as f2 from dual
        union
        select 3 as f1, 'c' as f2 from dual 
        union
        select 2 as f1, 'b' as f2 from dual
        union
        select 4 as f1, 'e' as f2 from dual) 
        
select * from Table2 T2
       where exists (select * from Table1 T1 where T1.f1 = T2.f1 and T1.f2<>T2.f2)
          



возвращает [2, b], чего не должно быть, т.к. [2, b] в обоих таблицах
...
Рейтинг: 0 / 0
задачка (можно ли как-то иначе)
    #39513350
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
инфера,

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

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
with t1(f1, f2) as
( 
select  1 f1, 'a' f2 from dual union all
select 2, 'b' from dual union all
select 3, 'c' from dual
)
,t2(f1, f2) as
( 
select  1 f1, 'b' f2 from dual union all
select 2, 'c' from dual union all
select 3, 'c' from dual union all
select 2, 'b' from dual union all
select 4, 'e' from dual
)
select t2.f1, t2.f2
From t2, t1, t1 t3
Where 
t2.f1=t1.f1 And t2.f2=t3.f2
minus 
Select f1,f2 from t1
...
Рейтинг: 0 / 0
задачка (можно ли как-то иначе)
    #39513351
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
инфера,
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
  1  with t1 (g1,g2) as (
  2  select 1,   'a' from dual union all
  3  select 2,   'b' from dual union all
  4  select 3,   'c' from dual)
  5  ,t2 (f1, f2) as (
  6  select 1,   'b' from dual union all
  7  select 2,   'a' from dual union all
  8  select 2,   'c' from dual union all
  9  select 2,   'b' from dual union all
 10  select 3,   'c' from dual union all
 11  select 5,   'a' from dual union all
 12  select 4,   'e'from dual)
 13  select t2.* from t2
 14* where exists (select 1 from t1 where (g1=f1 or g2=f2) and (g1<>f1 or g2<>f2))
SQL> /

        F1 F
---------- -
         1 b
         2 a
         2 c
         5 a




.....
stax
...
Рейтинг: 0 / 0
задачка (можно ли как-то иначе)
    #39513362
Фотография Павел Воронцов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
with t1(f1, f2) as
( 
select  1 f1, 'a' f2 from dual union all
select 2, 'b' from dual union all
select 3, 'c' from dual
)
,t2(f1, f2) as
( 
select  1 f1, 'b' f2 from dual union all
select 2, 'c' from dual union all
select 3, 'c' from dual union all
select 2, 'b' from dual union all
select 4, 'e' from dual
)
,t3 as (select f1,f2 from t2
minus
select f1,f2 from t1)
select f1,f2 from t3
where f1 in (select distinct f1 from t1)
or f2 in (select distinct f2 from t1)

?
...
Рейтинг: 0 / 0
задачка (можно ли как-то иначе)
    #39513363
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby,
я так понимаю
select 2, 'х' from dual union all

должен в выборку попадать

.....
stax
...
Рейтинг: 0 / 0
задачка (можно ли как-то иначе)
    #39513371
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax,

предлагается верить 20761162
согласно которому t1 :
а) определяет множество допустимых значений для f1
б) определяет множество допустимых значений для f2
в) определяет множество запрещенных пар (f1,f2)

(там же настаивается на том, что отобранные пары должны оказаться реляционным отношением (distinct))
...
Рейтинг: 0 / 0
задачка (можно ли как-то иначе)
    #39513384
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby,

понял, ето если исходить "вот так результат правильный"


более запутано, но "за один проход", если в т2 дубли + distinct

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
with t1 (g1,g2) as (
 select 0,   'a' from dual union all
 select 1,   'a' from dual union all
 select 2,   'b' from dual union all
 select 3,   'c' from dual)
,t2 (f1, f2) as (
 select 1,   'b' from dual union all
 select 2,   'a' from dual union all
 select 2,   'c' from dual union all
 select 2,   'x' from dual union all
 select 2,   'b' from dual union all
 select 3,   'c' from dual union all
 select 5,   'a' from dual union all
 select 4,   'e'from dual)
select t2.* from t2
where (select count(distinct decode(g1,f1,g1))+ count(distinct decode(g2,f2,g2))
       from t1 where (g1=f1 or g2=f2) and (g1<>f1 or g2<>f2))>1

SQL> /

        F1 F
---------- -
         1 b
         2 a
         2 c




......
stax
...
Рейтинг: 0 / 0
задачка (можно ли как-то иначе)
    #39513414
инфера
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Staxbooby,

понял, ето если исходить "вот так результат правильный"


более запутано, но "за один проход", если в т2 дубли + distinct

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
with t1 (g1,g2) as (
 select 0,   'a' from dual union all
 select 1,   'a' from dual union all
 select 2,   'b' from dual union all
 select 3,   'c' from dual)
,t2 (f1, f2) as (
 select 1,   'b' from dual union all
 select 2,   'a' from dual union all
 select 2,   'c' from dual union all
 select 2,   'x' from dual union all
 select 2,   'b' from dual union all
 select 3,   'c' from dual union all
 select 5,   'a' from dual union all
 select 4,   'e'from dual)
select t2.* from t2
where (select count(distinct decode(g1,f1,g1))+ count(distinct decode(g2,f2,g2))
       from t1 where (g1=f1 or g2=f2) and (g1<>f1 or g2<>f2))>1

SQL> /

        F1 F
---------- -
         1 b
         2 a
         2 c




......
stax

спасибо
это работает
мне не удалось найти данных на которых были бы проблемы
...
Рейтинг: 0 / 0
задачка (можно ли как-то иначе)
    #39513451
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
инфераспасибо
это работает
мне не удалось найти данных на которых были бы проблемы


у меня более запутано чем у booby

чутку изменил (подправил)
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
  1  with t1(f1, f2) as
  2  (
  3  select  0 f1, 'a' f2 from dual union all
  4  select  1 f1, 'a' f2 from dual union all
  5  select 2, 'b' from dual union all
  6  select 3, 'c' from dual
  7  )
  8  ,t2(f1, f2) as
  9  (
 10  select  1 f1, 'b' f2 from dual union all
 11  select 2, 'a' from dual union all
 12  select 2, 'b' from dual union all
 13  select 2, 'c' from dual union all
 14  select 2, 'x' from dual union all
 15  select 3, 'c' from dual union all
 16  select 5, 'a' from dual union all
 17  select 4, 'e' from dual
 18  )
 19  select distinct t2.f1, t2.f2
 20  From t2, t1, t1 t3
 21  Where
 22* t2.f1=t1.f1 And t2.f2=t3.f2 and (t1.f1<>t3.f1 or t1.f2<>t3.f2)
SQL> /

        F1 F
---------- -
         1 b
         2 c
         2 a
...
Рейтинг: 0 / 0
задачка (можно ли как-то иначе)
    #39513473
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax,
красиво крестишь.
Но в скобках, сдается, and должен быть в таком случае.
...
Рейтинг: 0 / 0
задачка (можно ли как-то иначе)
    #39513478
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
boobyStax,
красиво крестишь.
Но в скобках, сдается, and должен быть в таком случае.

да вроде нет
t2.f1=t1.f1 And t2.f2=t3.f2 and NOT (t1.f1=t3.f1 and t1.f2=t3.f2)

t1.f1=t3.f1 and t1.f2=t3.f2 совпадение строк
(можно было ровиды сравнить (<>), но во вюшке rowida нет)

.....
stax
...
Рейтинг: 0 / 0
задачка (можно ли как-то иначе)
    #39513738
Staxинфераспасибо
это работает
мне не удалось найти данных на которых были бы проблемы


у меня более запутано чем у booby

чутку изменил (подправил)
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
  1  with t1(f1, f2) as
  2  (
  3  select  0 f1, 'a' f2 from dual union all
  4  select  1 f1, 'a' f2 from dual union all
  5  select 2, 'b' from dual union all
  6  select 3, 'c' from dual
  7  )
  8  ,t2(f1, f2) as
  9  (
 10  select  1 f1, 'b' f2 from dual union all
 11  select 2, 'a' from dual union all
 12  select 2, 'b' from dual union all
 13  select 2, 'c' from dual union all
 14  select 2, 'x' from dual union all
 15  select 3, 'c' from dual union all
 16  select 5, 'a' from dual union all
 17  select 4, 'e' from dual
 18  )
 19  select distinct t2.f1, t2.f2
 20  From t2, t1, t1 t3
 21  Where
 22* t2.f1=t1.f1 And t2.f2=t3.f2 and (t1.f1<>t3.f1 or t1.f2<>t3.f2)
SQL> /

        F1 F
---------- -
         1 b
         2 c
         2 a


А может просто вот так
---- тут те же данные что и у вас with t1(f1, f2) as ........

select distinct t2.f1, t2.f2
From t2
join t1 on t1.f1=t2.f1 and t1.f2<>t2.f2;
...
Рейтинг: 0 / 0
задачка (можно ли как-то иначе)
    #39513741
пылинище
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
инфераStaxbooby,

понял, ето если исходить "вот так результат правильный"


более запутано, но "за один проход", если в т2 дубли + distinct

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
with t1 (g1,g2) as (
 select 0,   'a' from dual union all
 select 1,   'a' from dual union all
 select 2,   'b' from dual union all
 select 3,   'c' from dual)
,t2 (f1, f2) as (
 select 1,   'b' from dual union all
 select 2,   'a' from dual union all
 select 2,   'c' from dual union all
 select 2,   'x' from dual union all
 select 2,   'b' from dual union all
 select 3,   'c' from dual union all
 select 5,   'a' from dual union all
 select 4,   'e'from dual)
select t2.* from t2
where (select count(distinct decode(g1,f1,g1))+ count(distinct decode(g2,f2,g2))
       from t1 where (g1=f1 or g2=f2) and (g1<>f1 or g2<>f2))>1

SQL> /

        F1 F
---------- -
         1 b
         2 a
         2 c




......
stax

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


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