如何从键之间的一对多关系中选择一行

bvhaajcl  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(292)

这个问题在这里已经有答案了

为父表中的每一行选择子表中的单行(4个答案)
10个月前关门了。
我有以下问题

SELECT dfile.id
FROM dcmstudy_t dstud
INNER JOIN dcmseries_t dser ON dstud.id = dser.dcmstudy_id
INNER JOIN dcmfile_t dfile ON dser.id = dfile.dcmseries_id
INNER JOIN finst_t fi ON dfile.id = fi.file_id
INNER JOIN store s ON s.id = fi.store_id
WHERE dser.id in (69823713)

当你把身份证号码 WHERE 子句,此查询将返回~300行 dfile.id . 我的问题是我只需要一个 dfile.id 对于每个 dser.id 在where子句中。我知道如果我只是提供一个 dser.id 那么我可以限制1,但我需要提供很多 dser.idWHERE 每一个都只产生一个 dfile.id . 最后,我希望能够生成一个包含许多不同 dser.id 每个对应一个 dfile.id . 提到 dser.id 以及 dfile.id 是一对多,很多 dfile.id 对一个人 dser.id . 有什么建议吗?
更新
在看了你所有的建议之后,我提出了以下问题来解决我的问题。

SELECT dser.id,s.oname,Min(dfile.id) as FileID
FROM dcmstudy_t dstud
INNER JOIN dcmseries_t dser ON dstud.id = dser.dcmstudy_id
INNER JOIN dcmfile_t dfile ON dser.id = dfile.dcmseries_id
INNER JOIN finst_t fi ON dfile.id = fi.file_id
INNER JOIN store s ON s.id = fi.store_id
WHERE dser.id in (69823713,69644830,63763440)
group by dser.id,s.oname

谢谢大家的意见。

8hhllhi2

8hhllhi21#

考虑到问题中提到的查询是正确的,您可以使用 distinct on 条款 PostgreSQL 如下所述:
试试这个:

SELECT distinct on (dser.id)  dfile.id 
FROM dcmstudy_t dstud
INNER JOIN dcmseries_t dser ON dstud.id = dser.dcmstudy_id
INNER JOIN dcmfile_t dfile ON dser.id = dfile.dcmseries_id
INNER JOIN finst_t fi ON dfile.id = fi.file_id
INNER JOIN store s ON s.id = fi.store_id
WHERE dser.id in (69823713) 
order by dser.id, dfile.id

上面的查询将返回第一个 dfile.id .

相关问题