Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Помогите написать select / 7 сообщений из 7, страница 1 из 1
20.12.2017, 07:16
    #39572437
alx71
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написать select
Есть таблица 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
20.12.2017, 07:29
    #39572439
alx71
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написать select
У меня 10.2.0.5.0, поэтому listagg мне не подходит.
...
Рейтинг: 0 / 0
20.12.2017, 07:33
    #39572440
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написать select
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
20.12.2017, 10:11
    #39572488
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написать select
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
20.12.2017, 10:21
    #39572498
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написать select
Stax
Код: plsql
1.
 19*  having count(* /*distinct c1||'~'||c2 */)=(select count(*) c from t2)

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

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

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

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

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

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


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