Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Объединение таблиц
|
|||
|---|---|---|---|
|
#18+
Помогите, никак не допру с запросом: Есть две таблицы: 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 На мой взгляд, задача эквивалентна задаче удаления дубликатов.... Заранее спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2004, 15:54 |
|
||
|
Объединение таблиц
|
|||
|---|---|---|---|
|
#18+
Vasiliy Shanin ... 3 kk 11 или 31, ... а как понимать это "или"?? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2004, 15:57 |
|
||
|
Объединение таблиц
|
|||
|---|---|---|---|
|
#18+
мне все равно какое значение "к" лишь-бы j совпадало. В таблице s много дублирующихся записей. Мне нужно выбрать все из f и соединить их с любой одной записью из s там где значения j совпадают. В результате должно получиться столько-же записей, сколько в f ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2004, 16:10 |
|
||
|
Объединение таблиц
|
|||
|---|---|---|---|
|
#18+
в 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 столкнулся впервые и хочется сделать все в запросе ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2004, 16:17 |
|
||
|
Объединение таблиц
|
|||
|---|---|---|---|
|
#18+
т.е. первое попавшееся значение устроит? а если соответствующих значений нет? null? или не включать строку вообще? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2004, 17:10 |
|
||
|
Объединение таблиц
|
|||
|---|---|---|---|
|
#18+
вроде так: 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() можно свой агрегат написать который первое попавшеесе будет возврящать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2004, 18:16 |
|
||
|
Объединение таблиц
|
|||
|---|---|---|---|
|
#18+
а доки почитать? select f.i, f.j, (select s.k from s where s.j=f.j LIMIT 1) from f ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2004, 18:50 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=32597844&tid=2007778]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
128ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
| others: | 263ms |
| total: | 482ms |

| 0 / 0 |
