[英]MySQL - Join tables with IF condition
I have the following query which I want to modify with an IF
condition like: 我有以下查询,希望使用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'
How should this query be modified to incorporate this if condition? 如果条件该如何修改此查询以合并此查询? That is, the IF statement needs to replace: 也就是说,IF语句需要替换:
join morphology
on morphology.morphology_code = specimen.snop_code
join functions
on functions.functions_code = specimen.snop_code
Include the logic for specimen.snop_axis
(equals or, does not equal) into the join conditions of both tables to join like this: 将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'
;
A SQL query can only return a fixed set of columns. SQL查询只能返回一组固定的列。 You can do what you want with dynamic SQL, but not with a regular SQL query. 您可以使用动态SQL来执行所需的操作,但不能使用常规SQL查询来执行。
You can add the extra columns and have them be NULL
when the specimen does not match: 您可以添加额外的列,并在样本不匹配时将它们设置为NULL
:
The from
clause would continue: 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
. . .
I'm not quite sure how your join
s continue. 我不太确定您的join
如何继续。 But if you include the extra condition, then non-matching specimens will have NULL
values for the columns. 但是,如果包括额外条件,则不匹配的样本的列将为NULL
值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.