Postgresql查询至少有两个不同的结果用于相同的参考

时间:2017-06-05 15:59:42

标签: sql postgresql

我有以下ER模型

enter image description here

我需要编写一个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"的捐赠者的所有数据。

因为我发布了这个问题,所以我无法接近解决方案。我正在考虑诊断表的自连接方向,但是在这个表中没有引用它,所以自联接没有意义。

1 个答案:

答案 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
  ;