MySql WHERE IN(SELECT + HAVING)或使用WHERE AND搜索多个连接的行

时间:2017-11-23 17:48:10

标签: mysql join

,是否可以告诉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需要一列。

理想情况下,我可以使用

代替HAVING
WHERE keywords_names LIKE '%keyword1%' AND keywords_names LIKE '%keyword2%'

但这不起作用,因为即使其余数据相同,返回的行也不会同时包含两个关键字。

我需要找到附有两个关键字的程序。

我的下一次尝试是将查询分成两个独立的查询,在数组中提取ID并在第二个查询中使用该查询,但这可能效率不高。

修改 我想这个问题归结为我如何实现

HAVING keywords_names LIKE '%keyword1%' AND keywords_names LIKE '%keyword2%'

加入

谢谢

0 个答案:

没有答案