SQL连接6个表

SQL连接6个表,sql,sql-server-2008,join,Sql,Sql Server 2008,Join,请看图片。有5个表格与appointTable相关,带有appointID。 现在我需要所有具有相同约会id的数据。加入查询应该是什么?有人能帮我吗 这是生成的查询(我使用的是左外连接) 试试这个: SELECT dbo.Appointment.appointment_id, dbo.Appointment.patient_id, dbo.PatientInvestigaiton.investigation_name, dbo.PatientInvestigaiton.inves

请看图片。有5个表格与appointTable相关,带有appointID。 现在我需要所有具有相同约会id的数据。加入查询应该是什么?有人能帮我吗

这是生成的查询(我使用的是左外连接)

试试这个:

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 JOIN dbo.PatientInvestigaiton
        ON dbo.Appointment.appointment_id = dbo.PatientInvestigaiton.appointment_id
    LEFT JOIN dbo.PatientTreatmentMedicine
        ON dbo.Appointment.appointment_id = dbo.PatientTreatmentMedicine.appointment_id
    LEFT JOIN dbo.PatientFindings
        ON dbo.Appointment.appointment_id = dbo.PatientFindings.appointment_id
    LEFT JOIN dbo.PatientDiagonosis
        ON dbo.Appointment.appointment_id = dbo.PatientDiagonosis.appointment_id
    LEFT JOIN dbo.PatientCC
        ON dbo.Appointment.appointment_id = dbo.PatientCC.appointment_id
    LEFT JOIN dbo.PatientAdvice
        ON dbo.Appointment.appointment_id = dbo.PatientAdvice.appointment_id
WHERE
    dbo.Appointment.appointment_id='46';

由于
appointmnent\u id
Appointment
的主键,因此此表与所有6个表都有
1:N
关系

在这种情况下,连接到这6个表将产生具有重复数据的多行,就像笛卡尔积一样。例如,如果(仅一个
id=46
),则有:

  • 3行用于
    患者调查
  • 6行用于
    患者治疗药物
  • 4行用于
    PatientFindings
  • 2行用于
    患者诊断
  • 两行用于
    PatientCC
  • 5行用于
    patientDevice
您将在结果集中获得3x6x4x2x5=
1440
行,而您只需要3+6+4+2+2+5(+1)=
23
行。这是所需行数(以及列数)的60倍

最好是执行6个单独的查询,每个查询中的一个表(6个表中的一个)有一个联接(以及一个从基表
约会
获取数据的查询)。和组合应用程序代码中6个查询的结果。基本查询和要连接到第一个表的查询的示例:

基表

SELECT 
    a.appointment_id, 
    a.patient_id
FROM 
    Appointment AS a
WHERE
    a.appointment_id = 46
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
加入患者调查-1

SELECT 
    a.appointment_id, 
    a.patient_id
FROM 
    Appointment AS a
WHERE
    a.appointment_id = 46
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

复制并粘贴问题图像上显示的select查询。视图生成器在底部为您生成查询。所有的
JOIN
都将在那里。复制并粘贴问题图像上显示的select查询,因此,如果需要,我可以修改它。请查看我在主帖子中更新的查询..我在加入后获得了多个数据…可以吗?可以..效果很好..现在我有了视图…告诉我如何在该视图上查询以获取列的数据..就像我想从他正在选择的约会ID 46的视图中获取所有药物一样表中的数据…我不想要那个..告诉我如何查询视图…明白了吗?我可以为这种方法创建一个视图吗?那么它将是怎样的?如果你想要视图,你必须创建6(+1)个视图。为什么需要视图?
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