powered by simpleCommunicator - 2.0.40     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Объединить попарно строки
5 сообщений из 5, страница 1 из 1
Объединить попарно строки
    #40097622
jgbobby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго дня. Помогите сделать запрос...
Дано: таблица, из 3х строк с колонками col1 col2 col3.
атрибуты:
1 строка 1 1 1
2 строка 2 2 2
3 строка 3 3 3
Нужно: сделать 2ую таблицу, которая будет содержать 9 строк, являющихся попарным объединением строк из основной таблицы с колонками col1_1 col2_1 col3_1 col1_2 col2_2 col3_2 - содержимым объединенных строк.
1 строка 1 1 1 1 1 1
2 строка 1 1 1 2 2 2
3 строка 1 1 1 3 3 3
4 строка 2 2 2 1 1 1
5 строка 2 2 2 2 2 2
6 строка 2 2 2 3 3 3
7 строка 3 3 3 1 1 1
8 строка 3 3 3 2 2 2
9 строка 3 3 3 3 3 3
Идеально, чтобы таблица состояла из 6 строк без повторений типа 1 1 1 1 1 1, 2 2 2 2 2 2, 3 3 3 3 3 3 (понятно, что можно потом почистить повторения, но если это можно сделать сразу же в запросе, было бы хорошо):
1 строка 1 1 1 2 2 2
2 строка 1 1 1 3 3 3
3 строка 2 2 2 1 1 1
4 строка 2 2 2 3 3 3
5 строка 3 3 3 1 1 1
6 строка 3 3 3 2 2 2
Спасибо
...
Рейтинг: 0 / 0
Объединить попарно строки
    #40097626
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jgbobby,

9 строк - cross join таблицы самой на себя
6 строк - join по условию >
...
Рейтинг: 0 / 0
Объединить попарно строки
    #40097630
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jgbobby,

Код: sql
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.
--
--  9 строк:
with
  t (col1,col2,col3) as 
    (
       values (1,1,1)
            , (2,2,2)
            , (3,3,3)
    )
select *
  from t as t1
 cross join t as t2;

--
-- 6 строк: 
with
  t (col1,col2,col3) as 
   (
       values (1,1,1)
            , (2,2,2)
            , (3,3,3)
    )
select *
  from t as t1
  join t as t2
    on t1.col1 != t2.col1
   and t1.col2 != t2.col2
   and t1.col3 != t2.col3;
...
Рейтинг: 0 / 0
Объединить попарно строки
    #40097642
jgbobby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я наверно зря такой пример привёл. Привёл я его для того, чтобы понятна задача была. На самом деле известно только количество столбцов в исходной таблице. Их 3. Количество строк 1000. Значения в строках разные. 1 1 1 и тд я просто для примера привел. То есть запрос должен быть общим, чтобы из таблицы 1 получить таблицу 2, представляющую собой попарно перебранные значения таблицы 1..
...
Рейтинг: 0 / 0
Объединить попарно строки
    #40097646
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jgbobby,

Вот этот кусок кода - лишь эмуляция ваших тестовых данных:
Код: sql
1.
2.
3.
4.
5.
6.
7.
with
  t (col1,col2,col3) as 
    (
       values (1,1,1)
            , (2,2,2)
            , (3,3,3)
    )



Основной запрос - это вот этот кусок кода:
Код: sql
1.
2.
3.
4.
5.
6.
select *
  from t as t1
  join t as t2
    on t1.col1 != t2.col1
   and t1.col2 != t2.col2
   and t1.col3 != t2.col3;

Единственное, что для произвольных данных нужно заменить конъюнкцию скалярных неравенств на "векторное" неравенство.

На примере словарных таблиц PG:
Код: sql
1.
2.
3.
4.
5.
select * 
  from pg_tables as t1
  join pg_tables as t2
    on (t1.schemaname, t1.tablename, t1.tableowner) != -- <-- "Векторное" неравенство
       (t2.schemaname, t2.tablename, t2.tableowner)
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Объединить попарно строки
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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