简体   繁体   English

在 mysql WHERE 子句中使用 GROUP_CONCAT 和 FIND_IN_SET

[英]Using GROUP_CONCAT with FIND_IN_SET in mysql WHERE clause

I have this query and want get appointment data from the table using student email but it get this error Unknown column 'stu' in 'where clause'我有这个查询,并想使用学生电子邮件从表中获取约会数据,但它收到此错误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

FIND_IN_SET condition should be contained in HAVING statement instead of WHERE statement because you want to filter data after grouping 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) 

You can try using subquery您可以尝试使用子查询

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 ) 

Use a HAVING clause, but phrase the logic correctly:使用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;

There is no reason to use string concatenation to check whether the value exists.没有理由使用字符串连接来检查值是否存在。 The string comparisons are more expensive and less clear.字符串比较更昂贵且不太清楚。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM