繁体   English   中英

MySQL-使用IF条件联接表

[英]MySQL - Join tables with IF condition

我有以下查询,希望使用IF条件进行修改:

if(specimen.snop_axis = 'M', join morphology
    on morphology.morphology_code = specimen.snop_code, join functions on functions.functions_code = specimen.snop_code)

select *
  from specimen
  join topography_index
    on substring(specimen.topography_index, 2, 2) =
       topography_index.topography_index_code
  join morphology
    on morphology.morphology_code = specimen.snop_code
  join functions
    on functions.functions_code = specimen.snop_code
  left join specimen_image_lookup
    on specimen_image_lookup.specimen_fk = specimen.specimen_pk
  left join image
    on image.image_pk = specimen_image_lookup.image_fk
 where specimen.specimen_pk = '$specimen'

如果条件该如何修改此查询以合并此查询? 也就是说,IF语句需要替换:

join morphology
    on morphology.morphology_code = specimen.snop_code
  join functions
    on functions.functions_code = specimen.snop_code

specimen.snop_axis (等于或不等于)的逻辑包括在两个表的连接条件中,以便像这样进行连接:

SELECT
      *
FROM specimen
      JOIN topography_index
                  ON SUBSTRING(specimen.topography_index, 2, 2) =
                        topography_index.topography_index_code
      LEFT JOIN morphology
                  ON specimen.snop_axis = 'M' AND morphology.morphology_code = specimen.snop_code
      LEFT JOIN functions
                  ON specimen.snop_axis <>'M' AND functions.functions_code = specimen.snop_code
      LEFT JOIN specimen_image_lookup
                  ON specimen_image_lookup.specimen_fk = specimen.specimen_pk
      LEFT JOIN image
                  ON image.image_pk = specimen_image_lookup.image_fk
WHERE specimen.specimen_pk = '$specimen'
;

SQL查询只能返回一组固定的列。 您可以使用动态SQL来执行所需的操作,但不能使用常规SQL查询来执行。

您可以添加额外的列,并在样本不匹配时将它们设置为NULL

from子句将继续:

left join
image
on image.image_pk = specimen_image_lookup.image_fk left join
morphology
on morphology.morphology_code = specimen.snop_code and specimen.snop_axis = 'M' left join
. . . 

我不太确定您的join如何继续。 但是,如果包括额外条件,则不匹配的样本的列将为NULL值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM