我有以下ER模型
我需要编写一个postgresql查询来执行此操作。
选择所有捐赠者:
1)Diagnosis.name starts with "abc".
2)There should be a second Diagnosis.name for the same donor, and it should be "xyz"
将此视为样本数据:
捐助者表有:
id| name
1 |John
2 |Sam
事件表有:
id | event_type | donor_fk
1 | diagnosis | 1
2 | diagnosis | 2
3 | diagnosis | 2
4 | observation | 3
5 | intervention| 3
诊断表有:
id | name | event_FK
1 |abc | 2
2 |xyz | 3
我想知道我如何检查diagn.name的两个实例是否属于同一个捐赠者?
查询结果应该返回名为" Sam"的捐赠者的所有数据。
因为我发布了这个问题,所以我无法接近解决方案。我正在考虑诊断表的自连接方向,但是在这个表中没有引用它,所以自联接没有意义。
答案 0 :(得分:0)
/ *效率不高但有点可读的解决方案是:* /
select distinct a.*
from (
select do.id, do.name
from diagnosis diag
join event e on diag.event_fk = e.id
and upper(diag.name) like 'ABC%' /* here ya filter 1 */
join donor do on d.id = e.donor_fk
) a
join (
select do.id, do.name
from diagnosis diag
join event e on diag.event_fk = e.id
and upper(diag.name) like 'XYZ' /* here ya filter 2 */
join donor do on d.id = e.donor_fk
) b on a.id = b.id
;