SQL子查询还是联接?

SQL子查询还是联接?,sql,ms-access,Sql,Ms Access,理想的结果是让所有患有1种以上过敏反应的患者显示其PatientId(来自患者表,而非过敏表)和PatientName 2个表: Patient表包含PatientId(表示为p_)、PatientName 过敏表包含PatientId(表示为p_),AllergyName 到目前为止,我有两个查询想要连接在一起,但不知道如何连接: SELECT PatientId, PatientName FROM Patient; SELECT COUNT(AllergyNam

理想的结果是让所有患有1种以上过敏反应的患者显示其PatientId(来自患者表,而非过敏表)和PatientName

2个表:

  • Patient表包含PatientId(表示为p_)、PatientName

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

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

    SELECT PatientId, PatientName
    FROM Patient;

    SELECT COUNT(AllergyName)
    FROM Allergy
    GROUP BY AllergyName
    HAVING COUNT(AllergyName) >1;
我想在“背景”中完成计算,而不在表中显示。PatientId是相同的,只是对于Patient table,它是大写的P,对于Allergy table,它是小写的P。

这应该可以

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)

我想这就是你想要的:

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(来自患者表,而非过敏表)和PatientName


我猜您不需要显示计数。

下面的代码应该可以为您解决这个问题:

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

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

假设您只需要患者id和姓名,下面的查询适合您的要求


它说我需要为查询输入一个参数,如果它确实运行,它会不会创建一个名为allergy\u count的第三列,我希望得到的结果应该是PatientName和PatientName我需要的只是PatientId和PatientName,而不是allergy count,查询应该计算出谁有超过1个过敏源,并且只获取该名称和id,而不显示countUpdated,以便您考虑将图像更改为文本。Web浏览器无法读取图像。
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