powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Помогите написать select
24 сообщений из 49, страница 2 из 2
Помогите написать select
    #39572038
ultrasonic7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ТС, наверное, такой запрос хотел?
Код: plsql
1.
2.
3.
select DISTINCT(T1.ID) 
from tab1 t1, tab1 t2
where t1.c1 = t2.c1 and t1.c2 = t2.c2 and t1.id != t2.id


Будут выбраны как раз 1 и 4, как вы хотите
...
Рейтинг: 0 / 0
Помогите написать select
    #39572040
ultrasonic7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Или с JOIN'ами:
Код: sql
1.
2.
3.
4.
select DISTINCT(T1.ID) 
from tab1 t1 join tab1 t2
on t1.c1 = t2.c1 and t1.c2 = t2.c2 
where t1.id != t2.id
...
Рейтинг: 0 / 0
Помогите написать select
    #39572043
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А задаче кажется сложнее.
Ему нужен НАБОР
alx71ID C1 C2
1 A B
1 C D
1 E F
4 A B
4 C D
4 E F


У 1 и 4 полное соответствие всех остальных наборов.
...
Рейтинг: 0 / 0
Помогите написать select
    #39572045
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
982183,

alx71Необходимо выбрать ID ... например, для моего примера должны быть выбраны ID 1 и 4.
...
Рейтинг: 0 / 0
Помогите написать select
    #39572046
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Все строки данного ID соответствуют всем строкам другого ID"
...
Рейтинг: 0 / 0
Помогите написать select
    #39572048
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alx71Необходимо выбрать ID для полностью одинаковых наборов (без учета порядка строк),
...
Рейтинг: 0 / 0
Помогите написать select
    #39572055
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
982183,

так было 2 варианта: 21044775 и 21045461 (хотя я там as пропустил, не где сейчас тестонуть)
...
Рейтинг: 0 / 0
Помогите написать select
    #39572056
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ID C1 C2 ID C1 C21 A B4 A B1 C D4 C D1 E F4 E F
...
Рейтинг: 0 / 0
Помогите написать select
    #39572065
ааа

ну.. какой-то страшенный получился селект, если честно, хотя результат выдает верный
вероятно, можно и попроще сделать

Код: 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.
30.
31.
32.
33.
with a as
 (select 1 id, 'A' c1, 'B' c2
    from dual
  union
  select 1, 'C', 'D'
    from dual
  union
  select 1, 'E', 'F'
    from dual
  union
  select 2, 'G', 'H'
    from dual
  union
  select 3, 'I', 'J'
    from dual
  union
  select 3, 'K', 'L'
    from dual
  union
  select 4, 'A', 'B'
    from dual
  union
  select 4, 'C', 'D'
    from dual
  union
  select 4, 'E', 'F'
    from dual)
select id
  from (select count(id) over(partition by lst) cnt, id
          from (select distinct id,
                                listagg(c1 || ', ' || c2, ', ') WITHIN GROUP(order by c1 || ', ' || c2) over(partition by id) lst
                  from a))
 where cnt > 1
...
Рейтинг: 0 / 0
Помогите написать select
    #39572067
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaximaXXLStax,

Так должно сработать, хотя на livesql.oracle.com maintenance и не могу проверить =( :

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
with s (id, c1, c2) as (
select 1, 'A', 'B' from dual union all
select 1, 'C', 'D' from dual union all
select 1, 'E', 'F' from dual union all
select 2, 'G', 'H' from dual union all
select 3, 'I', 'J' from dual union all
select 3, 'K', 'L' from dual union all
select 4, 'A', 'B' from dual union all
select 4, 'C', 'D' from dual union all
select 4, 'E', 'F' from dual)
, s_org (select count(id) over (partition by id) cnt, s.* from s)

select s1.id from_id, s2.id to_id
       from s_org s1, s_org s2
      where s1.id != s2.id
      and s1.cnt = s2.cnt
      group by s1.id, s2.id, s1.cnt
having sum(case when s1.c1 = s2.c1 and s1.c2 = s2.c2 then 1 end) = s1.cnt



дубли допускаются?

ps
я б во where s1.c1 = s2.c1 and s1.c2 = s2.c2 и group by без s1.cnt

....
stax
...
Рейтинг: 0 / 0
Помогите написать select
    #39572070
ну скажите мне, что лучше - distinct или group by ? для удаления дублей ?))
...
Рейтинг: 0 / 0
Помогите написать select
    #39572074
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДобрыйМаксну скажите мне, что лучше - distinct или group by ? для удаления дублей ?))

9713162
...
Рейтинг: 0 / 0
Помогите написать select
    #39572077
982183ДобрыйМаксну скажите мне, что лучше - distinct или group by ? для удаления дублей ?))

9713162

спасибо
...
Рейтинг: 0 / 0
Помогите написать select
    #39572087
а кстати,
мой запрос выше получится не таким уж страшным, если учесть, что запрос с базы,

и listagg можно засунуть в with как раз, и тогда не будет трехуровневого селекта
...
Рейтинг: 0 / 0
Помогите написать select
    #39572099
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДобрыйМакс982183ДобрыйМаксну скажите мне, что лучше - distinct или group by ? для удаления дублей ?)) 9713162 спасибоАбсурдизмы. Оценил.
...
Рейтинг: 0 / 0
Помогите написать select
    #39572114
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДобрыйМакс,

c listagg два ограничения
1) выбор разделителя
2) длина строки (в древних версиях до 4000)

и прикиньте, если больше одной группы совпадений, как понять кто с кем?

.....
stax
...
Рейтинг: 0 / 0
Помогите написать select
    #39572141
StaxДобрыйМакс,

c listagg два ограничения
1) выбор разделителя
2) длина строки (в древних версиях до 4000)

и прикиньте, если больше одной группы совпадений, как понять кто с кем?

.....
stax

1) согласен
2) не пойму проблемы
1. исходим из постановки задачи - для каждого id должно быть ПОЛНОЕ совпадение по набору с другим id
2. listagg соберет для каждого id в одну строку отсортированный список (что исуключит нам ошибку разных наборов) всех значений, встречающихся для этого id
3. группируем по полученной строке и для тех id, для которых совпадение ПОЛНОЕ - выведем итог.

1 А Б
1 П Р
3 К Е
2 П Р
2 А Б
5 А Б
5 П Р
6 Р О

2. 1 А Б П Р
3 К Е
2 А Б П Р
5 А Б П Р
6 Р О
3. ID STR COUNT
1 А Б П Р - 3 - 3 СТРОКИ С ТАКИМ ЗНАЧЕНИЕМ
2 А Б П Р - 3
5 А Б П Р - 3
И В ИТОГ ВЫВЕДЕТ ТЕ, У КОГО ЗНАЧЕНИЕ COUNT > 1
поэтому, хоть 15 наборов
...
Рейтинг: 0 / 0
Помогите написать select
    #39572147
точнее,
с 1 и 2 согласен, а несогласие в сообщении выше в сомнением по поводу количества наборов.
ниже пример,

два совпадающих набора
Код: 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.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
with a as
 (select 1 id, 'A' c1, 'B' c2
    from dual
  union
  select 1, 'C', 'D'
    from dual
  union
  select 1, 'E', 'F'
    from dual
  union
  select 2, 'G', 'H'
    from dual
  union
  select 3, 'I', 'J'
    from dual
  union
  select 3, 'K', 'L'
    from dual
  union
  select 4, 'A', 'B'
    from dual
  union
  select 4, 'C', 'D'
    from dual
  union
  select 4, 'E', 'F'
    from dual
  union
  select 5, 'F', 'G'
    from dual
  union
  select 5, 'H', 'H'
    from dual
  union
  select 5, 'K', 'L'
    from dual
  union
  select 6, 'F', 'G'
    from dual
  union
  select 6, 'H', 'H'
    from dual
  union
  select 6, 'K', 'L'
    from dual)
select id
  from (select count(id) over(partition by lst) cnt, id
          from (select distinct id,
                                listagg(c1 || ', ' || c2, ', ') WITHIN GROUP(order by c1 || ', ' || c2) over(partition by id) lst
                  from a))
 where cnt > 1



результат
1
4
6
5


то есть корректно вывелись два совпадающих набора : для 1 и 4 , для 5 и 6
...
Рейтинг: 0 / 0
Помогите написать select
    #39572193
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДобрыйМакс
результат
1
4
6
5


то есть корректно вывелись два совпадающих набора : для 1 и 4 , для 5 и 6

кто с кем совпадает?

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

  1  with a (id,c1,c2) as (
  2    select 1, 'A', 'B'    from dual  union
  3    select 1, 'C', 'D'    from dual  union
  4    select 7, 'A', 'B'    from dual  union
  5    select 7, 'C', 'D'    from dual  union
  6    select 2, '-', '2'    from dual  union
  7    select 2, '-', '3'    from dual  union
  8    select 3, 'A', 'B'    from dual  union
  9    select 3, 'C', 'D'    from dual  union
 10    select 8, '-', '2'    from dual  union
 11    select 8, '-', '3'    from dual
 12  )
 13  select id
 14    from (select count(id) over(partition by lst) cnt, id
 15            from (select distinct id,
 16                                  listagg(c1 || ', ' || c2, ', ')
 17                        WITHIN GROUP(order by c1 || ', ' || c2)
 18                        over(partition by id) lst
 19                    from a))
 20*  where cnt > 1
SQL> /

        ID
----------
         2
         8
         3
         7
         1



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

наборы совпадают

разве в задании указано, что нужно соотносить кто именно с кем совпал ?
просто вывести id строк, для которых есть совпадающие наборы

и в твоем примере моего селекта тоже ничего не вижу ужасного,
вывелись id, для которых существуют совпадающие наборы

уточни, к чему ты ведешь )
...
Рейтинг: 0 / 0
Помогите написать select
    #39572211
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДобрыйМакс,

я веду к тому, что уточнять надо не у меня, а у alx71

если у меня, то нужны и кто с кем

мож ето лабораторка и достаточно 21044775

.....
stax
...
Рейтинг: 0 / 0
Помогите написать select
    #39572214
alx71Есть таблица
ID C1 C2
1 A B
1 C D
1 E F
2 G H
3 I J
3 K L
4 A B
4 C D
4 E F

Необходимо выбрать ID для полностью одинаковых наборов (без учета порядка строк), например, для моего примера должны быть выбраны ID 1 и 4.

судя по его постановке задачи - вывести в результат 1 и 4 - ему не нужно уточнение, какие id с какими совпадают. Как видим, в примере 1-н столюец результата, со значением id
...
Рейтинг: 0 / 0
Помогите написать select
    #39572390
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKadАбсурдизмы.
Согласен
...
Рейтинг: 0 / 0
Помогите написать select
    #39572407
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кто бл* сглазил.
Приходит сегодня заказчик и требует вывести клиентов, покупающих одинаковую продукцию.
...
Рейтинг: 0 / 0
24 сообщений из 49, страница 2 из 2
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Помогите написать select
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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