用内部联接合并结果

我写了这段SQL来与人物一起看电影(role_id = 1-是导演)。虽然电影只有一个导演-一切都很好,但是当导演不止一个时,会出现具有相同电影名称的额外行。

SELECT
    m.name, 
    ps.name as director
FROM
    movies m
INNER JOIN participants p ON
    m.movie_id = p.movie_id
INNER JOIN persones ps ON
    ps.person_id = p.person_id AND
    p.role_id = 1    
ORDER BY m.updated_at DESC
LIMIT 10\G

例如

*************************** 1. row ***************************
    name: Film1
director: director1
*************************** 2. row ***************************
    name: Film1
director: director2
*************************** 3. row ***************************
    name: Film1
director: director3
*************************** 4. row ***************************
    name: Film2
director: director4
*************************** 5. row ***************************
    name: Film2
director: director5
*************************** 6. row ***************************
    name: Film2
director: director6

好的,我在单行中找到了group_concat用于串联的控制器

SELECT
    m.name, 
    GROUP_CONCAT(ps.name SEPARATOR ", ") as director
FROM
    movies m
INNER JOIN participants p ON
    m.movie_id = p.movie_id
INNER JOIN persones ps ON
    ps.person_id = p.person_id AND
    p.role_id = 1    
ORDER BY m.updated_at DESC
LIMIT 10\G

但是我有意想不到的结果!

*************************** 1. row ***************************
    name: Film123
director: director1, someperson1, someperson3, ......, someperson18

与另一类别的人(艺术家或水手)只有一排。即使电影的行名称与ORDER BY m.updated_at DESC的名称不同,也必须返回

哈里德·朱奈德(M Khalid Junaid)

您缺少一个GROUP BY正在使用分组功能但未对它们进行分组的

SELECT
    m.name, 
    GROUP_CONCAT(ps.name SEPARATOR ", ") as director
FROM
    movies m
INNER JOIN participants p ON
    m.movie_id = p.movie_id
INNER JOIN persones ps ON
    ps.person_id = p.person_id AND
    p.role_id = 1    
GROUP BY m.name /* or you can use the movie id column here*/
ORDER BY m.updated_at DESC
LIMIT 10

GROUP_CONCAT(expr)

GROUP BY(汇总)功能

编辑还请确保您movie_idmovies表格中确实有

SELECT
    m.movie_id ,
    m.international_name AS o_name,
    m.description AS description,
    m.name AS name,
    m.covers AS covers,
    m.YEAR AS YEAR,
    m.updated_at AS added,
    GROUP_CONCAT(ps.name SEPARATOR ', ') AS director
FROM
    movies AS m
INNER JOIN  movies_genres AS mgen ON
    (m.movie_id = mgen.movie_id)
INNER JOIN participants p ON
    m.movie_id = p.movie_id
INNER JOIN persones ps ON
    ps.person_id = p.person_id AND
    p.role_id = 1 /* Directors */
WHERE
    m.hidden=0 AND
    mgen.genre_id = 6 AND

GROUP BY m.name
ORDER BY m.updated_at DESC

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

熊猫与内部联接合并返回KeyError

来自分类Dev

合并内部联接到表SQL的结果

来自分类Dev

MySQL内部连接合并行

来自分类Dev

将内部联接结果合并到一列

来自分类Dev

通过联接合并两个mySQL查询

来自分类Dev

内部联接无结果

来自分类Dev

MySql自联接意外结果内部联接

来自分类Dev

双重内部联接-错误的结果

来自分类Dev

合并内部联接时遇到问题

来自分类Dev

使用合并的内部联接的存储过程

来自分类Dev

将同一表上的两个左联接合并为一个

来自分类Dev

将同一表上的两个左联接合并为一个

来自分类Dev

简单的内部联接结果与Dapper?

来自分类Dev

SQL内部联接未给出期望的结果

来自分类Dev

与knex.js内部联接的结果不同

来自分类Dev

MySQL的内部联接与空选择结果?

来自分类Dev

内部联接查询结果不正确

来自分类Dev

访问:内部联接查询未产生结果

来自分类Dev

MySQL内部联接从两个结果

来自分类Dev

使用内部联接,多次返回相同的结果

来自分类Dev

sql,内部联接并查询结果,可能吗?

来自分类Dev

MYSQL内部联接为多行结果

来自分类Dev

内部联接未得到预期的结果

来自分类Dev

SQL使用联接并将两行从一个联接合并到一行,并在不同列中使用值

来自分类Dev

用源中的map联接结果

来自分类Dev

在LINQ中通过内部联接和分组获得结果

来自分类Dev

使用Doctrine QueryBuilder从Select语句获得的内部联接结果

来自分类Dev

在结果字段中使用数组的内部联接查询

来自分类Dev

先前计算的其他内部联接修改结果