【问题标题】:MySQL using table field in subquery as conditionMySQL使用子查询中的表字段作为条件
【发布时间】:2013-03-06 15:28:20
【问题描述】:

经过大量搜索,我得出以下sql语句:

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 name LIKE。如果我将名称写为字符串(HAVING name LIKE '%bmw%'),它可以工作,但我必须使用表 a 的名称字段来获取特定品牌的所有平均评级。有没有办法做到这一点?谢谢。

【问题讨论】:

  • 考虑为上述内容提供 DDL(或 SQLFIDDLE),包括有代表性的数据集和所需的相应结果集,以及对您要达到的目标的简单英文描述。

标签: mysql subquery conditional-statements having


【解决方案1】:

我认为你的内部子查询应该是这样的:

  (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,'%'))

【讨论】:

    【解决方案2】:

    你可以这样改变你的查询

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-05
      • 1970-01-01
      • 2013-05-09
      • 2013-03-12
      • 1970-01-01
      相关资源
      最近更新 更多