2014-02-07 66 views
0

我有兩個表:更新表的第一行中的Postgres

Corresp有該列:idCorresp, textCorresp ,dateCorresp
Trans有該列:idTransf , textTransf, dateTransf,idCorresp

這是數據的一個示例:

Corresp

 
001, testCorresp, 01/01/2014 

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

我想要的是與Postgres的查詢修改只是表trans這是關係到表的第一行corresp

這樣做的CorresptextCorresp在此列: 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) 

編輯從這裏開始

對於新的要求,這將有許多數據庫引擎的工作。希望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 
) 
相關問題