更新Postgres中的第一行表格

时间:2014-02-07 17:05:02

标签: sql postgresql

我有两张桌子:

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的第一行

因此请在此列中textCorresp Corresp:在第一行的textTransf

我尝试没有成功:

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 

2 个答案:

答案 0 :(得分: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 

答案 1 :(得分: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
)