Объединение таблиц

Vasiliy Shanin
Дата: 09.07.2004 15:54:13
Помогите, никак не допру с запросом:
Есть две таблицы:
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
На мой взгляд, задача эквивалентна задаче удаления дубликатов....
Заранее спасибо!
vis
Дата: 09.07.2004 15:57:46
Vasiliy Shanin

...
3 kk 11 или 31,
...

а как понимать это "или"??
Vasiliy Shanin
Дата: 09.07.2004 16:10:08
мне все равно какое значение "к" лишь-бы j совпадало.
В таблице s много дублирующихся записей.
Мне нужно выбрать все из f и соединить их с любой одной записью из s там где значения j совпадают.
В результате должно получиться столько-же записей, сколько в f
Vasiliy Shanin
Дата: 09.07.2004 16:17:29
в 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 столкнулся впервые и хочется сделать все в запросе
vis
Дата: 09.07.2004 17:10:40
т.е. первое попавшееся значение устроит?
а если соответствующих значений нет? null?
или не включать строку вообще?
wbear
Дата: 09.07.2004 18:16:38
вроде так:
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() можно свой агрегат написать который первое попавшеесе будет возврящать
vis
Дата: 09.07.2004 18:50:58
а доки почитать?

select f.i, f.j, (select s.k from s where s.j=f.j LIMIT 1) from f
LeXa NalBat
Дата: 12.07.2004 09:37:39
select j, min(i), min(k) from f join s using (j) group by j;

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


Я бы и в оракле сделал так же, как и в постгресе - выборкой из двух таблиц.