2014-02-07 6 views
0

У меня есть две таблицы:обновить первую строку таблицы в Postgres

Corresp, которые имеют эти столбцы: idCorresp, textCorresp ,dateCorresp
Trans, которые имеют эти столбцы: idTransf , textTransf, dateTransf,idCorresp

это пример данных:

Corresp

 
001, testCorresp, 01/01/2014 

Trans

 
1 , T1, 01/01/2013, 001 
2 , T2, 01/02/2013, 001 
3 , T3, 01/03/2013, 001 

Я хочу разработать запрос с Postgres изменить только первую строку таблицы trans, которая связана с таблицей corresp

так сделать textCorresp из Corresp в этой колонке: textTransf первой линии Trans`

Я стараюсь без успеха:

update Trans trans 
set textTransf= (
select corresp.textCorresp 
from Corresp corresp , Trans trans 
where corresp.idCorresp= trans.idCorresp 
) 
from Corresp corresp , Trans trans 
where corresp.idCorresp= trans.idCorresp 
and trans.dateTransf=(select min(trans.dateTransf) 
from Corresp corresp , Trans trans 
where corresp.idCorresp= trans.idCorresp) 

в результате после запуска моего запроса я хочу, чтобы этот результат в Trans

 
1 , testCorresp, 01/01/2013, 001 
2 , T2, 01/02/2013, 001 
3 , T3, 01/03/2013, 001 

Стараюсь также с:

 
update Trans trans3 
    set textTransf= 
textCorresp 
from 
(
select Corresp .textCorresp , min(trans.dateTransf) 
from Trans trans , Corresp corresp, Trans trans2 
where corresp.idCorresp= trans.idCorresp 
and corresp.idCorresp= trans2.idCorresp 
group by 
corresp.textCorresp ,trans.dateTransf 
)as toto 

WHERE trans3.idTransf = toto.idTransf 
+0

Прежде всего - как вы определяете 'только первую строку таблицы trans'? Это линия с минимальной датой? Строка с минимальным id? Что-то другое? –

ответ

0

Это общая идея.

update trans 
set this = that, etc 
where idtransf = 
(select min(idtransf) 
from trans 
where idCorresp = the one you want) 

Edit начинается здесь

Для нового требования, это будет работать со многими дб двигателей. Надеюсь, postgresql является одним из них.

update trans 
field = sqfield 
from trans join 
(select SomeFieldFromTrans sqlfield, min(idtransf) mintrans 
from trans join corresp on the proper fields 
group by SomeFieldFromTrans) sq ob idtransf = mintrans 
+0

Благодарим вас за ответ, я обновил свой вопрос, я хочу выполнить свой запрос не в конкретных Corresp и Transf, а для всех данных в этих двух таблицах. – franco

+0

На работе, когда кто-то меняет требование после того, как я его удовлетворил, они должен мне пиво. –

0

Что делать, если вы пытаетесь как этот

update Trans set textTransf = (select textCorresp from Corresp cr join Trans tx 
on cr.idCorresp = tx.idCorresp) 
where idTransf = (
select idTransf 
from 
Trans t join Corresp c 
on t.idCorresp = c.idCorresp limit 1 
) 
Смежные вопросы