SQL子查询还是加入?

时间:2017-08-09 12:04:34

标签: sql ms-access

期望的结果是让所有患有1个以上过敏症的患者使用PatientId(来自患者表,非过敏表)和患者名称

2表:

  • 患者表包含PatientId(表示为P_),PatientName。

  • 过敏表包含PatientId(表示为p_),AllergyName。

到目前为止,我有2个查询要连接在一起,但不知道如何:

    SELECT PatientId, PatientName
    FROM Patient;

    SELECT COUNT(AllergyName)
    FROM Allergy
    GROUP BY AllergyName
    HAVING COUNT(AllergyName) >1;

我想在"背景"中完成计算。没有在表中显示。 PatientId是相同的,只是对于Patient表,它是过敏表的大写P和小写p。

5 个答案:

答案 0 :(得分:1)

SELECT PatientId, PatientName
FROM Patient INNER JOIN (SELECT COUNT(*) as allergy_count, PatientId
        FROM Allergy
        GROUP BY PatientId
        HAVING COUNT(*) >1) aggr ON Patient.PatientId=aggr.PatientId

答案 1 :(得分:0)

这应该有用。

SELECT PatientId, PatientName from (
SELECT PatientId, PatientName, (SELECT COUNT(AllergyName)
    FROM Allergy A
    WHERE A.PatientId= P.PatientId
    GROUP BY patientID 
    HAVING COUNT(AllergyName) >1)
    FROM Patient P)

答案 2 :(得分:0)

我认为这就是你要求的:

SELECT Patient.PatientId, Patient.PatientName
FROM Patient
INNER JOIN Allergy ON Patient.PatientId = Allergy.patientId
GROUP BY Allergy.patientId
HAVING COUNT(Allergy.AllergyName)>1;

编辑:

  

所有患有1种以上过敏症的患者均表现出过敏   PatientId(来自Patient table,NOT Allergy table)和PatientName

我猜你不需要显示计数。

答案 3 :(得分:0)

以下代码应解决您的目的:

SELECT P.PatientID, P.PatientName from Patient P
JOIN Allergy A ON A.PatientID = P.PatientID
GROUP BY A.AllergyName
HAVING COUNT(A.PatiendID) > 1

在大型数据集的情况下,内部查询可能会降低性能,因此建议使用连接来优化查询性能。

答案 4 :(得分:-3)

假设您只需要患者ID和姓名,则以下查询适合您的要求。

I hope this would work

相关问题