soh*_*_ju 4 sql join sql-server-2008
请看一下这个图片.有5个表与periodicTable相关,有的是givenID.现在我需要所有具有相同约会ID的数据......加入查询应该是什么?任何人都可以帮助我吗?
这是生成的查询(我正在使用Left outer Join)
SELECT dbo.Appointment.appointment_id, dbo.Appointment.patient_id, dbo.PatientInvestigaiton.investigation_name, dbo.PatientInvestigaiton.investigation_id,
dbo.PatientTreatmentMedicine.medecine_id, dbo.PatientTreatmentMedicine.medicinename, dbo.PatientTreatmentMedicine.medicinetype,
dbo.PatientFindings.finding_id, dbo.PatientFindings.finding_value, dbo.PatientAdvice.advice_description, dbo.PatientCC.cc_value, dbo.PatientCC.cc_id,
dbo.PatientDiagonosis.diagonosis_name, dbo.PatientDiagonosis.diagonosis_id
FROM dbo.Appointment LEFT OUTER JOIN
dbo.PatientInvestigaiton ON dbo.Appointment.appointment_id = dbo.PatientInvestigaiton.appointment_id LEFT OUTER JOIN
dbo.PatientTreatmentMedicine ON dbo.Appointment.appointment_id = dbo.PatientTreatmentMedicine.appointment_id LEFT OUTER JOIN
dbo.PatientFindings ON dbo.Appointment.appointment_id = dbo.PatientFindings.appointment_id LEFT OUTER JOIN
dbo.PatientDiagonosis ON dbo.Appointment.appointment_id = dbo.PatientDiagonosis.appointment_id LEFT OUTER JOIN
dbo.PatientCC ON dbo.Appointment.appointment_id = dbo.PatientCC.appointment_id LEFT OUTER JOIN
dbo.PatientAdvice ON dbo.Appointment.appointment_id = dbo.PatientAdvice.appointment_id
where dbo.Appointment.appointment_id='46';
Run Code Online (Sandbox Code Playgroud)
由于appointmnent_id
是主键Appointment
,因此该表1:N
与所有6个表有关系.
这种情况下,加入这6个表将产生具有重复数据的多行,它就像一个Cartesian Product
.例如,如果(仅一个id=46
),有:
PatientInvestigation
PatientTreatmentMedicine
PatientFindings
PatientDiagnosis
PatientCC
PatientAdvice
你会1440
在结果集中得到3x6x4x2x2x5 = 行,而你只需要3 + 6 + 4 + 2 + 2 + 5(+1)= 23
行.这比所需的行多60倍(并且列数更多).
如果你在每个查询中使用一个JOIN到一个(在6个)表中执行6个单独的查询(以及从基表获取数据的另一个查询),则会更好Appointment
.并在应用程序代码中组合6个查询的结果.基本查询和要加入第一个表的查询的示例:
基表:
SELECT
a.appointment_id,
a.patient_id
FROM
Appointment AS a
WHERE
a.appointment_id = 46
Run Code Online (Sandbox Code Playgroud)
Join-1 to PatientInvestigation:
SELECT
pi.investigation_name,
pi.investigation_id
FROM
Appointment AS a
JOIN
PatientInvestigation AS pi
ON pi.appointment_id = a.appointment_id
WHERE
a.appointment_id = 46
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3585 次 |
最近记录: |