【问题标题】:Using GROUP_CONCAT with FIND_IN_SET in mysql WHERE clause在 mysql WHERE 子句中使用 GROUP_CONCAT 和 FIND_IN_SET
【发布时间】:2019-02-14 10:13:45
【问题描述】:

我有这个查询,想使用学生电子邮件从表中获取约会数据,但收到此错误Unknown column 'stu' in 'where clause'

select a.*, GROUP_CONCAT(e.value) as stu FROM wp_ea_appointments a join
wp_ea_fields e on a.id = e.app_id WHERE a.date > DATE('2019-02-14') AND
FIND_IN_SET('jan@gmail.com' , stu ) GROUP BY a.id

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    FIND_IN_SET 条件应该包含在HAVING 语句而不是WHERE 语句中,因为您要在分组后过滤数据

    SELECT a.*, 
        GROUP_CONCAT(e.value) as stu 
    FROM wp_ea_appointments a 
    JOIN wp_ea_fields e ON a.id = e.app_id 
    WHERE a.date > DATE('2019-02-14')
    GROUP BY a.id
    HAVING FIND_IN_SET('jan@gmail.com', stu) 
    

    【讨论】:

      【解决方案2】:

      您可以尝试使用子查询

      select * from
      (
      select a.*, GROUP_CONCAT(e.value) as stu FROM wp_ea_appointments a join
      wp_ea_fields e on a.id = e.app_id WHERE a.date > DATE('2019-02-14') 
      GROUP BY a.id
      )A where FIND_IN_SET('jan@gmail.com' , stu ) 
      

      【讨论】:

        【解决方案3】:

        使用HAVING 子句,但要正确表述逻辑:

        SELECT a.*, GROUP_CONCAT(e.value) as stu
        FROM wp_ea_appointments a JOIN
             wp_ea_fields e 
             ON a.id = e.app_id
        WHERE a.date > DATE('2019-02-14')
        HAVING SUM( e.value = 'jan@gmail.com' ) > 0;
        

        没有理由使用字符串连接来检查值是否存在。字符串比较更昂贵且不太清晰。

        【讨论】:

          猜你喜欢
          • 2014-04-13
          • 2019-09-08
          • 1970-01-01
          • 1970-01-01
          • 2011-05-16
          • 1970-01-01
          • 2014-09-18
          • 2022-01-08
          • 1970-01-01
          相关资源
          最近更新 更多