Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Объединение таблиц / 8 сообщений из 8, страница 1 из 1
09.07.2004, 15:54
    #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
09.07.2004, 15:57
    #32597763
vis
vis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение таблиц
Vasiliy Shanin
...
3 kk 11 или 31,
...

а как понимать это "или"??
...
Рейтинг: 0 / 0
09.07.2004, 16:10
    #32597810
Vasiliy Shanin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение таблиц
мне все равно какое значение "к" лишь-бы j совпадало.
В таблице s много дублирующихся записей.
Мне нужно выбрать все из f и соединить их с любой одной записью из s там где значения j совпадают.
В результате должно получиться столько-же записей, сколько в f
...
Рейтинг: 0 / 0
09.07.2004, 16:17
    #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
09.07.2004, 17:10
    #32597990
vis
vis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение таблиц
т.е. первое попавшееся значение устроит?
а если соответствующих значений нет? null?
или не включать строку вообще?
...
Рейтинг: 0 / 0
09.07.2004, 18:16
    #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
09.07.2004, 18:50
    #32598199
vis
vis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение таблиц
а доки почитать?

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

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

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


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