期望的结果是让所有患有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。
答案 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和姓名,则以下查询适合您的要求。