2013-03-18 1 views
1

После долгих поисков я пришел к следующей SQL Statement:MySQL, используя поле таблицы в подзапросе как условие

SELECT a.*, b.name as producer , 
    (SELECT ROUND(AVG(average)) 
    FROM `abc123_pb_carexperience` d 
    LEFT JOIN `abc123_pb_cars` e on d.car_id=e.id HAVING name LIKE '%a.name%') as avgrating 
FROM abc123_pb_brands a 
LEFT JOIN abc123_pb_producer as b on a.producer_id = b.id 
ORDER BY a.name ASC 

Достопримечательности является условие HAVING имени LIKE в подзапросе. Он работает, если я напишу там имя как строку (HAVING name LIKE '% bmw%'), но я должен использовать поле имени таблицы a, чтобы получить все средние оценки для конкретного бренда. Есть ли идея, как это сделать? Благодарю.

+0

Рассмотрим предоставление DDLS (или SQLFIDDLE) для выше, включая репрезентативный набор данных и желаемый и соответствующий набор результатов, а также простое английское описание того, чего вы пытаетесь достичь. – Strawberry

ответ

2

Я думаю, что ваш внутренний подзапрос должен выглядеть так:

(SELECT ROUND(AVG(average)) 
    FROM `abc123_pb_carexperience` d 
    LEFT JOIN `abc123_pb_cars` e on d.car_id=e.id 
    WHERE name LIKE CONCAT('%',a.name,'%')) 
+0

Да, это так, спасибо –

0

Вы можете изменить свой запрос, как этот

SELECT 
    a.*, 
    b.name as producer, 
    ROUND(AVG(d.average)) as avgrating 
FROM abc123_pb_brands a 
    LEFT JOIN abc123_pb_producer as b 
    on a.producer_id = b.id 
    LEFT JOIN `abc123_pb_carexperience` d 
    ON d.name LIKE '%a.name%' 
    LEFT JOIN `abc123_pb_cars` e 
    on d.car_id = e.id 
ORDER BY a.name ASC