2013-11-26 5 views
1
SELECT IFNULL(oea.`name`,op.name) AS "Consultation" 
FROM `a` ca 
JOIN `b` oea ON ca.`consultation_id` = oea.id AND oea.status = 1 
LEFT OUTER JOIN c oeal ON oea.`location_id` = oeal.id 
WHERE oea.employee_profile_id IN (
            SELECT profile_id 
            FROM d pp 
            WHERE pp.status='1' 
            UNION 
            SELECT op.id 
            FROM e op 
            WHERE op.status 
           ) AND 
     ca.status = 1 

Я получаю эту ошибкуподзапрос значение выходит за рамки

Unknown column 'op.name' in 'field list' 

Есть ли возможность использовать op.name за рамки?

+0

Можете ли вы сделать вместо этого производную таблицу? – Sico

+0

@Sico Я не был так хорошо знаком с производной таблицей, поможет ли это мне? –

ответ

2

JOIN Подзапрос в предложении WHERE вместо использования предиката IN. Таким образом вы можете выбрать имя из него.

Но вы не сделали выберите столбец name из подзапроса. Выбранный только profile_id, вы должны выбрать его с помощью profile_id. Что-то вроде:

SELECT 
    IFNULL(oea.`name`, op.name) AS Consultation 
FROM `a` ca 
JOIN `b` oea ON ca.`consultation_id` = oea.id AND oea.status = 1 
INNER JOIN 
(
    SELECT profile_id, name 
    FROM d pp 
    WHERE pp.status='1' 
    UNION  
    SELECT op.id, name 
    FROM e op 
    WHERE op.status 
) AS op ON oea.employee_profile_id = op.profile_id 
LEFT OUTER JOIN c oeal ON oea.`location_id` = oeal.id 
WHERE ca.status = 1; 

Я предположил, что эти две таблицы имеют name столбец, если один из них не было, вы должны использовать null вместо этого.

+0

Да, это работает, спасибо Махамуд –

+0

@Suganthan - приветствую любое время :) –

+0

там два запроса на выбор внутри оператора объединения, наш db с более чем десятками тысяч данных, есть ли оптимизированное предложение перебраться эти выбирают запросы, потому что это повлияет на производительность. –

Смежные вопросы