SELECT查询中的查找和条件JOIN

web*_*orm 1 sql sql-server if-statement join

我有一张包含三条患者信息的表格.

Diagnosis_ID      Patient_ID        Diagnosis_Code
====================================================
1                 Jenkins, Sam          A743
2                 Smith, Fred           D638
3                 Doe, John             G732
Run Code Online (Sandbox Code Playgroud)

我想查询此表,但还添加第三列"诊断描述",该列链接到另一个表中的诊断代码.

Diagnosis_ID      Patient_ID        Diagnosis_Code     Diagnosis_Description
=============================================================================
1                 Jenkins, Sam          A743             Sleep Apnea
2                 Smith, Fred           D638             High Blood Pressure
3                 Doe, John             G732             Dislocated Joint
Run Code Online (Sandbox Code Playgroud)

通常我可以只JOIN给涉及表Diagnosis_CodeDiagnosis_Description,我会好到哪里去.然而,这并不容易.值的值Diagnosis_Description位于三个可能的表中的一个中.确定我需要加入哪个表取决于Diagnosis_ID是什么.

所以我当前要做的就是每个Diagnosis_ID我必须查询另一个表,告诉我哪个表需要基于Diagnosis_Level加入Diagnosis_Code,然后一旦我有,我就可以得到Diagnosis_Description.这是一些我希望描述过程的"伪代码".

SELECT DiagnosisLevel FROM DiagnosisDetail WHERE Diagnosis_ID = 1

If DiagnosisLevel = "DiagnosisTable1" Then
  SELECT Diagnosis_Description FROM DiagnosisTable1 WHERE Diagnosis_Code = 'A743'
ElseIf DiagnosisLevel = "DiagnosisTable2" Then
  SELECT Diagnosis_Description FROM DiagnosisTable2 WHERE Diagnosis_Code = 'A743'
ElseIf
  SELECT Diagnosis_Description FROM DiagnosisTable3 WHERE Diagnosis_Code = 'A743'
End If
Run Code Online (Sandbox Code Playgroud)

我不知道如何在SQL中完成所有这些.它甚至可能还是我必须在代码中完成所有操作(即C#)?

如果这看起来很模糊,我道歉.我尽力创建一个简单的例子来演示这个问题.我没有设计这个数据库,但必须在其结构中工作.

gbn*_*gbn 7

多个LEFT JOIN?对于主表中的每一行,这将选择适当的LEFT JOIN到正确的DiagnosisTable上

SELECT
    T.*, 
    COALESCE(D1.Diagnosis_Description, D2.Diagnosis_Description, D3.Diagnosis_Description)
FROM 
    MyTable T
    LEFT JOIN
    DiagnosisTable1 D1 ON T.Diagnosis_Code = D1.Diagnosis_Code
                   AND T.DiagnosisLevel = 'DiagnosisTable1'
    LEFT JOIN
    DiagnosisTable2 D2 ON T.Diagnosis_Code = D2.Diagnosis_Code
                   AND T.DiagnosisLevel = 'DiagnosisTable2'
    LEFT JOIN
    DiagnosisTable3 D3 ON T.Diagnosis_Code = D3.Diagnosis_Code
                   AND T.DiagnosisLevel = 'DiagnosisTable3'
Run Code Online (Sandbox Code Playgroud)