[英]SQL how to select participant IDs with specific row values in same table, where those row values are from a lookup list in another schema?
我想從一個表中 select 參與者在 B 列中同時診斷為癌症和糖尿病
例如:
ParticipantID Diagnosis
1234 Cancer
1234 Diabetes
4567 Cancer
4567 Lung Disease
8910 Stroke
1256 Lung Disease
3489 Chron's Disease
如何編寫一個查詢,允許我查詢具有兩個(或多個)特定診斷的 select 參與者,例如,我只想查看同時患有癌症和糖尿病的參與者? (在上述示例中,參與者 ID 為 1234)
我嘗試做一個簡單的 select 語句:
SELECT diagnosisifknown.participantid
diagnosisifknown.diagnsis
diagnosisifknown.date
FROM
diagnosisifknown
where diagnosis ="1" and "10";
(查找表中這些診斷的值)
我想要一個像這樣的 output :
1234 Cancer
1234 Diabetes
聚合提供了一種簡單的選擇:
SELECT ParticipantID
FROM yourTable
GROUP BY ParticipantID
HAVING MIN(Diagnosis) <> MAX(Diagnosis);
你也可以在這里使用存在邏輯:
SELECT t1.ParticipantID
FROM yourTable t1
WHERE EXISTS (SELECT 1 FROM yourTable t2
WHERE t2.ParticipantID = t1.ParticipantID AND t2.Diagnosis <> t1.Diagnosis);
你可以用 cte 來做,這里是演示。
with cte as
(
select
ParticipantID
from myTable
where Diagnosis in ('Cancer', 'Diabetes')
group by
ParticipantID
having count(ParticipantID) > 1
)
select
c.ParticipantID,
m.Diagnosis
from cte c
join myTable m
on c.ParticipantID = m.ParticipantID
output:
| participantid | diagnosis |
| ------------- | --------- |
| 1234 | Cancer |
| 1234 | Diabetes |
如果你想要參與者,你可以使用:
SELECT d.participantid
FROM diagnosisifknown d
WHERE diagnosis IN ('Cancer', 'Diabetes')
GROUP BY d.participantid
HAVING COUNT(*) = 2;
如果您想要原始行,我可能會建議EXISTS
:
select d.*
from diagnosisifknown d
where exists (select 1
from diagnosisifknown d2
where d2.participantid = d.participantid and d2.diagnosis = 'Cancer'
) and
exists (select 1
from diagnosisifknown d2
where d2.participantid = d.participantid and d2.diagnosis = 'Diabetes'
) ;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.