MySQL在LEFT JOIN条件下从别名的结果中选择数据

时间:2018-07-26 17:50:00

标签: mysql

SELECT e.`event_type`,e.`event_status`,er.`event_reg_id`,er.`event_id`,'events' as category, 
    IF(e.`event_type`='C',e.`parent_id` ,IF(e.`event_type`='S',er.`event_id`,'') ) temp_id  
FROM `event_registration` er
    LEFT JOIN event e on er.`event_id`= temp_id WHERE er.`company_id`='%s' AND er.`student_id`='%S'

我以temp_id作为别名,并将其赋予LEFT JOIN ON 条件,它不起作用。 我在LEFT JOIN ON条件下给了别名而不是列名

1 个答案:

答案 0 :(得分:0)

您不能在查询的temp_id部分使用ON别名。别名在那里不可用。但是您可以执行以下操作,将嵌套的IF移至ON部分:

SELECT
    e.`event_type`,
    e.`event_status`,
    er.`event_reg_id`,
    er.`event_id`,
    'events' AS category, 
    IF(e.`event_type` = 'C', e.`parent_id`, IF(e.`event_type` = 'S', er.`event_id`,'')) AS temp_id, 
FROM `event_registration` er
    LEFT JOIN event e ON er.`event_id`= IF(e.`event_type` = 'C', e.`parent_id`, IF(e.`event_type` = 'S', er.`event_id`,'')) 
WHERE er.`company_id` = '%s' AND er.`student_id` = '%S'

您不能使用SELECT中的别名,因为FROM部分执行得较早(see this answer on StackOverflow)。