2013-03-18 60 views
1

很多搜​​索我的后来到下面的SQL语句:使用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名。它的工作原理是,如果我在那里写出名称为字符串(HAVING name LIKE'%bmw%'),但我必须使用表a的名称字段来获取特定品牌的所有平均评级。有什么想法如何实现?谢谢。

+0

考虑提供的DDL(或SQLFIDDLE)针对上述情况,包括有代表性的数据集以及期望的和相应的结果集,以及你想要达到的目标的纯英文描述。 – Strawberry 2013-03-18 10:33:58

回答

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

是的,非常感谢 – 2013-03-18 10:46:29

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