2013-03-18 70 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