我遇到了获取数据的问题。我想找到所有的课程,其中包含where子句中的标志,并获取它包含的所有标志。GROUP_CONCAT和INNER JOIN与WHERE子句
记录为当然表:
+----+----------+
| id | name |
+----+----------+
| 1 | Spring |
| 2 | Hibernate|
| 3 | C# |
+----+----------+
记录为course_flags表:
+----+----------+----------+
| id |course_id | flag_id |
+----+----------+----------+
| 1 | 1 | 1 |
| 2 | 1 | 2 |
| 3 | 2 | 1 |
+----+----------+----------+
记录为标志表:
+----+------------+
| 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
不幸的是我的数据库引擎返回的记录与一个标志标志柱:
+----+----------+----------+
| id | name | flags |
+----+----------+----------+
| 1 | Spring | 1 |
| 2 | Hibernate| 1 |
+----+----------+----------+
我原本希望得到这样的结果:
+----+----------+----------+
| id | name | flags |
+----+----------+----------+
| 1 | Spring | 1,2 |
| 2 | Hibernate| 1 |
+----+----------+----------+
问题我如何得到它?
在此先感谢!
注意:您的GROUP BY子句更正确的是GROUP BY course.id,course.name。正如你所写,你的查询在大多数RDBMS上不起作用,因为它是不明确的。 MySQL只是选择忽略这个事实和猜测以及你的意思。只要'course.id'是一个主键,你就会好起来的,但是最好指定一个你想要的字段。 –