2014-09-29 3 views
0

я следующий запрос, который я хочу изменить с IF условия, как:MySQL - Присоединяйтесь к таблицам с 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 

ответ

3

Включите логику 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' 
; 
+0

+1, вы бьете меня минуту – radar

+0

@Used_By_Already ... Красивый! Большое спасибо! – IlludiumPu36

+0

Вам нужно добавить JOIN после LEFT для морфологии ... – IlludiumPu36

0

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 для столбцов.