GROUP_CONCAT 和 INNER JOIN 与 WHERE 子句 [英] GROUP_CONCAT and INNER JOIN with WHERE clause

查看:47
本文介绍了GROUP_CONCAT 和 INNER JOIN 与 WHERE 子句的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在获取数据时遇到了问题.我想找到在 where 子句中包含标志的所有课程,并获取它包含的所有标志课程.

I've got a problem with getting data. I would like to find all courses, which contain the flag in where clause and get all flags course it contains.

课程表的记录:

+----+----------+
| id |   name   |
+----+----------+
| 1  | Spring   |
| 2  | Hibernate|
| 3  | C#       |
+----+----------+

course_flags 表的记录:

+----+----------+----------+
| id |course_id |  flag_id |
+----+----------+----------+
| 1  |     1    |     1    |
| 2  |     1    |     2    |
| 3  |     2    |     1    |
+----+----------+----------+

flag 表的记录:

+----+------------+
| id |    name    |
+----+------------+
| 1  | promocja   |
| 2  |last minute |
+----+------------+

我的查询

SELECT course.id, course.name,
       GROUP_CONCAT(Flag.id SEPARATOR ',') as flags
FROM course
INNER JOIN course_flags ON 
    course.id = course_flags.course_id
INNER JOIN flag ON 
    flag.id = course_flags.flag_id
WHERE flag.name LIKE 'promocja'
GROUP BY Course.id

不幸的是,我的数据库引擎返回的记录在 flags 列中有一个标记:

Unfortunately my database engine returned records with one flag in flags column:

+----+----------+----------+
| id |   name   |   flags  |
+----+----------+----------+
| 1  | Spring   |     1    |
| 2  | Hibernate|     1    |
+----+----------+----------+

我曾希望得到这样的结果:

I had hoped to get this result:

+----+----------+----------+
| id |   name   |   flags  |
+----+----------+----------+
| 1  | Spring   |   1,2    |
| 2  | Hibernate|    1     |
+----+----------+----------+

问题我如何获得它?

提前致谢!

推荐答案

WHERE 子句限制记录先于分组;而 HAVING 子句限制 after 分组后的结果:

The WHERE clause restricts records prior to grouping; whereas the HAVING clause restricts results after grouping:

SELECT   course.id, course.name, GROUP_CONCAT(Flag.id) flags
FROM     course
    JOIN course_flags ON course_flags.course_id = course.id
    JOIN flag ON flag.id = course_flags.flag_id
GROUP BY Course.id
HAVING   SUM(flag.name = 'promocja')

sqlfiddle 上查看.

这篇关于GROUP_CONCAT 和 INNER JOIN 与 WHERE 子句的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆