powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Объединение таблиц
8 сообщений из 8, страница 1 из 1
Объединение таблиц
    #32597748
Vasiliy Shanin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помогите, никак не допру с запросом:
Есть две таблицы:
create table f (i number, j varchar2(20));
insert into f values(1, 'kk');
insert into f values(2, 'jj');
insert into f values(3, 'kk');
create table s (k number, j varchar2(20));
insert into s values(11, 'kk');
insert into s values(21, 'jj');
insert into s values(31, 'kk');
insert into s values(11, 'kk');
insert into s values(21, 'jj');
insert into s values(31, 'kk');

Хочется объединить их и получить:
1 kk 11
2 jj 21
3 kk 11 или 31,
Иначе, для каждой строки из f нужно любое одно значение k из s где f.j=s.j
На мой взгляд, задача эквивалентна задаче удаления дубликатов....
Заранее спасибо!
...
Рейтинг: 0 / 0
Объединение таблиц
    #32597763
vis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vasiliy Shanin
...
3 kk 11 или 31,
...

а как понимать это "или"??
...
Рейтинг: 0 / 0
Объединение таблиц
    #32597810
Vasiliy Shanin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
мне все равно какое значение "к" лишь-бы j совпадало.
В таблице s много дублирующихся записей.
Мне нужно выбрать все из f и соединить их с любой одной записью из s там где значения j совпадают.
В результате должно получиться столько-же записей, сколько в f
...
Рейтинг: 0 / 0
Объединение таблиц
    #32597844
Vasiliy Shanin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в oracle я бы решал проблему через функции:

create function my_f(i in varchar) return int
as
qq int;
begin
select k into qq from s where j=i and rownum<2;
return qq;
end;
/

тогда select f.*, my_func(...) from f даст искомый рез-т
Честно говоря с postgress столкнулся впервые и хочется сделать все в запросе
...
Рейтинг: 0 / 0
Объединение таблиц
    #32597990
vis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
т.е. первое попавшееся значение устроит?
а если соответствующих значений нет? null?
или не включать строку вообще?
...
Рейтинг: 0 / 0
Объединение таблиц
    #32598124
wbear
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вроде так:
select m.f1,m.f2,max(m.f3) from (select a.i as f1,a.j as f2,b.i as f3 from a left join b on a.j=bj ) as m group by m.f1,mf2

вместо max() можно свой агрегат написать который первое попавшеесе будет возврящать
...
Рейтинг: 0 / 0
Объединение таблиц
    #32598199
vis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а доки почитать?

select f.i, f.j, (select s.k from s where s.j=f.j LIMIT 1) from f
...
Рейтинг: 0 / 0
Объединение таблиц
    #32599054
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
select j, min(i), min(k) from f join s using (j) group by j;

Vasiliy Shaninв oracle я бы решал проблему через функции

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


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