我有两张桌子:
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
答案 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
)