MySQL-使用IF条件连接表

MySQL-使用IF条件连接表,mysql,sql,Mysql,Sql,我有以下查询,我想用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 substr

我有以下查询,我想用
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条件?也就是说,IF语句需要替换:

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

SQL查询只能返回一组固定的列。您可以使用动态SQL做您想做的事情,但不能使用常规SQL查询

当样本不匹配时,您可以添加额外的列并使其为
NULL

来自的
子句将继续:

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
. . . 

我不太确定您的
加入如何继续。但是如果包含额外条件,则非匹配样本的列将具有
NULL
值。

SQL查询只能返回一组固定的列。您可以使用动态SQL做您想做的事情,但不能使用常规SQL查询

当样本不匹配时,您可以添加额外的列并使其为
NULL

来自
子句将继续:

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
. . . 

我不太确定您的
加入如何继续。但是如果包含额外条件,则非匹配样本的列将具有
NULL
值。

SQL查询只能返回一组固定的列。您可以使用动态SQL做您想做的事情,但不能使用常规SQL查询

当样本不匹配时,您可以添加额外的列并使其为
NULL

来自
子句将继续:

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
. . . 

我不太确定您的
加入如何继续。但是如果包含额外条件,则非匹配样本的列将具有
NULL
值。

SQL查询只能返回一组固定的列。您可以使用动态SQL做您想做的事情,但不能使用常规SQL查询

当样本不匹配时,您可以添加额外的列并使其为
NULL

来自
子句将继续:

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
. . . 

我不太确定您的
加入如何继续。但如果包含额外条件,则非匹配样本的列将具有
NULL
值。

包括
样本的逻辑。snop_轴
(等于或不等于)将包含到两个表的联接条件中,以便按如下方式联接:

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'
;
选择
*
从标本
联合地形图索引
子串上(样本.地形指数,2,2)=
地形索引。地形索引代码
左连接形态学
在sample.snop_轴上='M'和morphics.morphics_代码=sample.snop_代码
左连接函数
在sample.snop_轴“M”和functions.functions_code=sample.snop_code上
左连接样本\u图像\u查找
在样本_图像_lookup.sample_fk=sample.sample_pk上
左连接图像
ON image.image\u pk=样本\u图像\u查找.image\u fk
其中sample.sample_pk=“$sample”
;

样本的逻辑。snop_轴
(等于或不等于)包含到两个表的联接条件中,以便如下方式联接:

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'
;
选择
*
从标本
联合地形图索引
子串上(样本.地形指数,2,2)=
地形索引。地形索引代码
左连接形态学
在sample.snop_轴上='M'和morphics.morphics_代码=sample.snop_代码
左连接函数
在sample.snop_轴“M”和functions.functions_code=sample.snop_code上
左连接样本\u图像\u查找
在样本_图像_lookup.sample_fk=sample.sample_pk上
左连接图像
ON image.image\u pk=样本\u图像\u查找.image\u fk
其中sample.sample_pk=“$sample”
;

样本的逻辑。snop_轴
(等于或不等于)包含到两个表的联接条件中,以便如下方式联接:

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'
;
选择
*
从标本
联合地形图索引
子串上(样本.地形指数,2,2)=
地形索引。地形索引代码
左连接形态学
在sample.snop_轴上='M'和morphics.morphics_代码=sample.snop_代码
左连接函数
在sample.snop_轴“M”和functions.functions_code=sample.snop_code上
左连接样本\u图像\u查找
在样本_图像_lookup.sample_fk=sample.sample_pk上
左连接图像
ON image.image\u pk=样本\u图像\u查找.image\u fk
其中sample.sample_pk=“$sample”
;

样本的逻辑。snop_轴
(等于或不等于)包含到两个表的联接条件中,以便如下方式联接:

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'
;
选择
*
从标本
联合地形图索引
子串上(样本.地形指数,2,2)=
地形索引。地形索引代码
左连接形态学
在sample.snop_轴上='M'和morphics.morphics_代码=sample.snop_代码
左连接函数
在sample.snop_轴“M”和functions.functions_code=sample.snop_code上
左连接样本\u图像\u查找
在样本_图像_lookup.sample_fk=sample.sample_pk上
左连接图像
ON image.image\u pk=样本\u图像\u查找.image\u fk
其中sample.sample_pk=“$sample”
;
是的,我也看到了(你似乎在添加评论)-无论如何谢谢是的,我也看到了(你似乎在添加评论)-无论如何谢谢是的,我也看到了(你似乎在添加评论)-无论如何谢谢是的,我也看到了(你似乎在添加评论)-无论如何谢谢