,是否可以告诉MySql不要返回我需要生成的列才能使用HAVING?
SELECT *
---other joins
FROM programs
WHERE id IN(
SELECT DISTINCT
id,
GROUP_CONCAT(DISTINCT keywords.name SEPARATOR ", ") AS keywords_names
FROM programs
LEFT JOIN program_keywords pk ON pk.program_id = programs.id
LEFT JOIN keywords ON keywords.id = pk.keyword_id
---other joins
WHERE ---
HAVING keywords_names LIKE '%keyword1%' AND keywords_names LIKE '%keyword2%'
)
GROUP BY programs.id
ORDER BY programs.name, programs.id ASC
正如您所见,keywords_names将生成错误,因为WHERE IN需要一列。
理想情况下,我可以使用
代替HAVINGWHERE keywords_names LIKE '%keyword1%' AND keywords_names LIKE '%keyword2%'
但这不起作用,因为即使其余数据相同,返回的行也不会同时包含两个关键字。
我需要找到附有两个关键字的程序。
我的下一次尝试是将查询分成两个独立的查询,在数组中提取ID并在第二个查询中使用该查询,但这可能效率不高。
修改 我想这个问题归结为我如何实现
HAVING keywords_names LIKE '%keyword1%' AND keywords_names LIKE '%keyword2%'
加入
谢谢