这个问题在这里已经有答案了:
为父表中的每一行选择子表中的单行(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.id
在 WHERE
每一个都只产生一个 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
谢谢大家的意见。
1条答案
按热度按时间8hhllhi21#
考虑到问题中提到的查询是正确的,您可以使用
distinct on
条款PostgreSQL
如下所述:试试这个:
上面的查询将返回第一个
dfile.id
.