powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Помогите написать select
7 сообщений из 7, страница 1 из 1
Помогите написать select
    #39572437
alx71
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть таблица t1.
ID C1 C2
1 A B
1 C D
1 E F
2 G H
3 I J
4 A B
4 C D
5 A B
6 C D

Таблица t2.

C1 C2
A B
C D

Необходимо вывести ID из таблицы t1, для которых присутствуют все значения из t2. Для вышеприведенного примера это 1 и 4.
Задача не учебная, а вполне боевая, просто я ее постарался максимально упростить.

Мой вариант на PL/SQL
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
for id in (select distinct id from t1)loop
    for t2 in (select * from t2) loop
       select count(*) into v_cnt from t1 where id=id.id and c1=t2.c1 and c2=t2.c2;
       if v_cnt = 0 then
         goto NOT_FOUND;
       end if;
    end loop;
/*
    тут нужный нам ID
*/
<<NOT_FOUND>>:
   null;
end loop;



Возможно ли сделать это в SQL?
...
Рейтинг: 0 / 0
Помогите написать select
    #39572439
alx71
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня 10.2.0.5.0, поэтому listagg мне не подходит.
...
Рейтинг: 0 / 0
Помогите написать select
    #39572440
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alx71listagg мне не подходит.А он нигде не подойдёт.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
select t0.id
  from (select distinct id from t1) t0
  where not exists
            ( select c1, c2 from t2
              minus
              select c1, c2 from t1 where t1.id = t0.id
            )
...
Рейтинг: 0 / 0
Помогите написать select
    #39572488
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alx71,

Код: 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.
SQL> ed
Wrote file afiedt.buf

  1  with t1 (ID, C1, C2) as (
  2  select 1, 'A', 'B' from dual union all
  3  select 1, 'C', 'D' from dual union all
  4  select 1, 'E', 'F' from dual union all
  5  select 2, 'G', 'H' from dual union all
  6  select 3, 'I', 'J' from dual union all
  7  select 4, 'A', 'B' from dual union all
  8  select 4, 'C', 'D' from dual union all
  9  select 5, 'A', 'B' from dual union all
 10  select 6, 'C', 'D' from dual
 11  )
 12  ,t2 (C1, C2) as (
 13  select 'A', 'B' from dual union all
 14  select 'C', 'D' from dual)
 15   select id
 16   from t1
 17   where (c1,c2) in (select c1,c2 from t2)
 18   group by id
 19*  having count(* /*distinct c1||'~'||c2 */)=(select count(*) c from t2)
SQL> /

        ID
----------
         1
         4



.....
stax
...
Рейтинг: 0 / 0
Помогите написать select
    #39572498
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax
Код: plsql
1.
 19*  having count(* /*distinct c1||'~'||c2 */)=(select count(*) c from t2)

Ты не упомянул условие уникальности обоих наборов.
...
Рейтинг: 0 / 0
Помогите написать select
    #39572566
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElicStax
Код: plsql
1.
 19*  having count(* /*distinct c1||'~'||c2 */)=(select count(*) c from t2)

Ты не упомянул условие уникальности обоих наборов.

почему в обоих, достаточно чтоб в т2 не было дублей

каюсь, в етой теме утаил, а в соседней спрашивал

.....
stax
...
Рейтинг: 0 / 0
Помогите написать select
    #39572605
alx71,

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


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